在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如:
- 在请求开始时,建立数据库连接;
- 在请求开始时,根据需求进行权限校验;
- 在请求结束时,指定数据的交互格式;
为了让每个视图函数避免编写重复功能的代码,Flask提供了通用设施的功能,即请求钩子。
请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子:
1、before_first_request
在处理第一个请求前执行,可以在此方法内部做一些初始化操作
2、before_request
在每一次请求之前调用,这时候已经有请求了,可能在这个方法里面做请求的校验
如果请求的校验不成功,可以直接在此方法中进行响应,直接return之后那么就不会执行视图函数
3、after_request
如果没有抛出错误,在每次请求后执行
接受一个参数:视图函数作出的响应
在此函数中可以对响应值在返回之前做最后一步修改处理
需要将参数中的响应在此参数中进行返回
4、teardown_request
请每一次请求之后都会调用,会接受一个参数,参数是服务器出现的错误信息
案例
代码块:
from flask import Flask,request,render_template
app=Flask(__name__)
@app.before_first_request
def before_first_request():
#在处理第一个请求前执行
print('服务器第一次接收请求的时候执行')
@app.before_request
def before_request():
print('服务器每次接收请求之前都会先执行')
#如果有return,后面的视图函数就不再执行
#return "提前结束"
@app.after_request
def after_request(response):
#如果没有抛出错误,在每次请求后执行
#接收一个参数:视图函数作出的响应
#在此函数中可以对视图函数的返回值再传给客户端做最后一部的修改处理
#需要将参数中的响应在此参数中进行返回
print('每次视图函数执行完毕之后执行')
return response
@app.teardown_request
def teardown_request(response):
#在每次请求之后执行
#接收一个参数:错误信息,如果有相关错误抛出
print('请求结束的时候执行')
@app.route('/')
def func():
return "OK"
if __name__ == '__main__':
app.run(debug=True)
在第1次请求时的打印:
服务器第一次接收请求的时候执行
服务器每次接收请求之前都会先执行
每次视图函数执行完毕之后执行
请求结束的时候执行
在第2次请求时的打印:
服务器每次接收请求之前都会先执行
每次视图函数执行完毕之后执行
请求结束的时候执行
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123413.html