【Flask】项目中使用请求钩子的妙处有那些?

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 【Flask】项目中使用请求钩子的妙处有那些?,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如:

  • 在请求开始时,建立数据库连接;
  • 在请求开始时,根据需求进行权限校验;
  • 在请求结束时,指定数据的交互格式;

为了让每个视图函数避免编写重复功能的代码,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

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!