flask框架

 

详细见:https://www.cnblogs.com/xiaoyuanqujing/articles/11715484.html

1.Local与偏函数

2.init递归

3.请求上下文

4.蓝图

 

5.g对象

6.信号

7.flask-session

 

 

一.Local与偏函数

二.init递归

三.请求上下文

四.蓝图

@@@见电脑视频盘flask文件夹里面

五.g对象

"""
结论:
1.当前请求内你只要设置了就可以取,只要你不return掉,
2.必须先设置后取,当前请求内可以取无限次
3.就算你当前请求设置了,如果不取,其他请求过来,也是取不到的
"""
from flask import Flask,request,g
app = Flask(__name__)

#
@app.before_request
def a():
    # 当一个url路径等于根的时候,带一个参数过去要用
    if request.path == "/":
        request.name = "sb"
        g.name = "sb"
    print(g.name)

# def set_g():
#     g.name = "sb"

@app.route('/')
def index():
    # set_g()
    print(g.name)

    return "1"

@app.route('/index')
def login():
    return '2'

if __name__ == '__main__':
    app.run()

 

六.信号

首先需要安装:pip3 install blinker

 

from flask import Flask,signals,render_template
app = Flask(__name__)
# 往信号中注册函数
#1给信号绑定要执行的函数
#无需管调用,因为flask,已经给我们设置调用点
def func(*args,**kwargs):
    print('触发型号',args,kwargs)
#与该信号进行绑定 绑定这个函数对象
signals.request_started.connect(func)
# 点send就会触发
# signals.request_started.send
# 触发信号: signals.request_started.send()
@app.before_first_request
def before_first1(*args,**kwargs):
    print("befor_first_request")

@app.before_request
def before_first3(*args,**kwargs):
    print("befor_request")

@app.route('/',methods=['GET',"POST"])
def index():
    print('视图')
    return "视图"

if __name__ == '__main__':
  # app.wsgi_app
    app.run()

 

自定义信号:

from flask import Flask
from flask.signals import _signals
app = Flask(import_name=__name__)
# 1.自定义信号
xxxxx = _signals.signal('xxxxx')

def func(sender,a):
    print(sender,a)
    print("我是自定义信号")

# 2.自定义信号中注册函数 传入这个函数对象
xxxxx.connect(func)

@app.route("/x")
def index():
    # 3.触发信号 就算不传也要接受参数,第一个参数就是那个人去调的,没有实际意义
    # 只允许第一个参数用位置传参,第二个参数必须用关键字传参
    xxxxx.send("sb",a="1")
    return 'Index'

if __name__ == '__main__':
    app.run()

 

七.flask-session

首先需要安装:pip3 install flask-session

使用方法一:(复杂)

'''
参数代表什么:
1.key_prefix='jason',2.use_signer=True,3. permanent=False
1.随便写就是一个前缀
2.False不用设置秘钥,如果为True就需要秘钥
3.关闭浏览器浏览器失效
'''
 1 # 将session存入redis中
 2 from flask import Flask,session
 3 # 要放入redis中就导入redis
 4 from flask_session import RedisSessionInterface
 5 import redis
 6 app = Flask(__name__)
 7 # 就是一个秘钥
 8 app.secret_key="ajksda"
 9 # redis链接
10 conn=redis.Redis(host='127.0.0.1',port=6379)
11 
12 #use_signer是否对key签名
13 app.session_interface=RedisSessionInterface(conn,key_prefix='jason',use_signer=True, permanent=False)
14 @app.route('/')
15 def hello_world():
16     session['sb']='jason'
17     return 'Hello World!'
18 
19 @app.route('/index')
20 def index():
21     print(session['sb'])
22     return "ok"
23 
24 if __name__ == '__main__':
25     app.run()
View Code

 

使用方式二(推荐使用)

from flask import Flask,session
import  redis
from flask_session import Session
app = Flask(__name__)
# 需要存入redis数据库
app.config['SESSION_TYPE'] = 'redis'
# redis链接
app.config['SESSION_REDIS'] =redis.Redis(host='127.0.0.1',port='6379')
# 存入时加个前缀
app.config['SESSION_KEY_PREFIX']="jason"
Session(app)

@app.route('/')
def hello_world():
    session['sb']='jason'
    return 'Hello World!'

@app.route("/index")
def index():
    print(session['sb'])
    return "ok"

if __name__ == '__main__':
    app.run()

 

posted @ 2019-11-13 23:16  ZHANGYUZY  阅读(118)  评论(0编辑  收藏  举报