详细见: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()
使用方式二(推荐使用)
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()