flask-06 flask上下文和钩子

Posted 每天优一点

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask-06 flask上下文和钩子相关的知识,希望对你有一定的参考价值。



打卡第六天

一、flask的上下文对象

  • 请求上下文(request context):request 和session都属于请求上下文对象

  • 应用上下文(application context):current_app 和g都属于应用上下文对象

  • current_app:表示当前运行程序文件的程序实例

  • g:处理请求时,用于临时存储的对象,每次请求都会重设这个变量



request = {    "线程A":{        form:{"city":"sh"}        args:...    },    "线程B":{        form:{"city":"beijing"}        args:... }, . . .}


from flask import g# g 在一次请求的过程中 多个函数之间传递参数 每次请求之前会先清空@app.route("/login")def login(): g.username = "zs" return "login success"    def say_hello():    username = g.username


二、请求钩子 hook

请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子

before_first_request:在处理第一个请求前运行@app.before_first_request
before_request:在每次请求前运行
after_request(response):如果没有未处理的异常抛出,在每次请求后运行
#非denug模式  工作在生产模式teardown_request(response):在每次请求后运行,即时有未处理的异常抛出

@app.route("/index")def index(): print("index called") return "sss"
@app.before_first_requestdef handle_f1(): print("第一次请求前执行")
@app.before_requestdef handle_f2(): print("每次请求前执行")
@app.after_requestdef handle_f3(res): print("如果没有未处理的异常抛出 在请求完成执行") return res
@app.teardown_requestdef handle_f4(res): print("有没有未处理的异常 都会在请求完成之后执行")    return res


/usr/local/bin/python3.7 /Users/mudy/Desktop/flask_project/code3/09_hook.py * Serving Flask app "09_hook" (lazy loading) * Environment: production   WARNING: Do not use the development server in a production environment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)第一次请求前执行每次请求前执行index called如果没有未处理的异常抛出 在请求完成执行有没有未处理的异常 都会在请求完成之后执行127.0.0.1 - - [15/Apr/2019 21:54:53] "GET /index HTTP/1.1" 200 -127.0.0.1 - - [15/Apr/2019 21:54:54] "GET /index HTTP/1.1" 200 -每次请求前执行index called如果没有未处理的异常抛出 在请求完成执行有没有未处理的异常 都会在请求完成之后执行

可以在钩子函数中使用requests.path来区分具体的请求

hook path = requests.path if path == url_for("index): ...

三、flask_script脚本扩展的说明

pip install Flask-Script

from flask import Flaskfrom flask_script import Manager
app = Flask(__name__)manage = Manager(app)
@app.route("/index")def index(): return "sss"

if __name__ == "__main__": manage.run()
python 10_script.py shellpython 10_script.py runserver #-h -p 


以上是关于flask-06 flask上下文和钩子的主要内容,如果未能解决你的问题,请参考以下文章

Flask钩子函数

Flask框架钩子函数使用方式及应用场景分析

Flask框架 之上下文请求钩子与Flask_Script

Flask-1-06-script扩展

Flask06-Flask_脚本

Flask:06-一首歌的时间掌握flask数据模型(02)