FastAPI

【OK】flask笔记(十六):请求钩子

2019-09-25  本文已影响0人  warmsirius

一、什么是请求钩子?

1.请求钩子的含义

有时在处理请求之前或之后执行代码会很有用,在Django中学的中间件类似。

例如,在请求开始时,我们可能需要创建数据库连接或认证发起请求的用户。

为了避免在每个视图函数中都使用重复的代码,Flask提供了注册通用函数功能,注册的函数可在请求被分发到视图函数之前或之后调用。

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

@app.before_first_request
@app.before_request
@app.after_request

注意: 只是在debug=False的时候才会出现,如果为True,不会走这个方法。

@app.teardown_request

2. 请求钩子和视图函数共享数据

请求钩子和视图函数之间共享数据一般使用 上下文全局变量:g

例如,before_request处理程序可以从数据库中加载已登录用户,并将其保存到g.user中。随后调用视图函数时,视图函数再使用g.user获取用户。

二、请求钩子举例

可以通过request来获取请求,来区分请求钩子的执行,这种使用钩子的情况比较少,但是比较麻烦

@app.before_request
def handle_before_request():
    '''在第一次请求处理之前先被执行'''
    path = request.path
    if path == url_for("index"):
        print("在请求钩子中判断请求的视图逻辑")
    elif path == url_for('hello'):
        print('在hello中判断请求的逻辑')
    print("handle_before_reques被执行")
@app.before_request
def handle_before_request():
    '''在第一次请求处理之前先被执行'''
    path = request.path
    if path in [url_for("index"), url_for("hello")]:
        print("在请求钩子中判断请求的视图逻辑")
    elif path == url_for('hello'):
        print('在hello中判断请求的逻辑')
    print("handle_before_reques被执行")
上一篇 下一篇

猜你喜欢

热点阅读