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):在每次请求后运行,即时有未处理的异常抛出
def index():
print("index called")
return "sss"
def handle_f1():
print("第一次请求前执行")
def handle_f2():
print("每次请求前执行")
def handle_f3(res):
print("如果没有未处理的异常抛出 在请求完成执行")
return res
def 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 Flask
from flask_script import Manager
app = Flask(__name__)
manage = Manager(app)
def index():
return "sss"
if __name__ == "__main__":
manage.run()
python 10_script.py shell
python 10_script.py runserver #-h -p
以上是关于flask-06 flask上下文和钩子的主要内容,如果未能解决你的问题,请参考以下文章