如何使用flask的 @app.before_request 装饰器
@app.before_request
是 Flask 中的一个装饰器,可以用来注册一个函数,在每次请求处理之前执行。这个装饰器可以用来实现一些通用的功能,比如请求鉴权、记录请求日志等。
以下是一个示例
在这个示例中,@app.before_request
装饰器注册了一个名为 before_request 的函数,这个函数会在每次请求处理之前执行。在这个函数中,我们可以进行一些通用的操作,比如鉴权。
from flask import Flask, request app = Flask(__name__) @app.before_request def before_request(): # 在请求处理之前执行的代码 if request.path != '/login' and not is_authenticated(): # 如果请求的路径不是 /login,并且用户未认证,返回 401 错误 return {'message': 'Unauthorized'}, 401 @app.route('/login', methods=['POST']) def login(): # 用户登录的逻辑 pass @app.route('/api/resource') def get_resource(): # 获取资源的逻辑 pass
在这个示例中,我们检查了请求的路径,如果请求的路径不是/login
,并且用户未认证,就返回 401 错误。
这个逻辑可以应用于所有的请求处理函数,通过 @app.before_request
注解,我们可以避免在每个请求处理函数中都进行一次鉴权逻辑的重复编写。
注意
需要注意的是,如果在 @app.before_request
注解的函数中返回了响应,那么这个响应会直接返回给客户端,请求处理函数将不会被调用。
因此,在实现 @app.before_request
注解时,需要注意处理逻辑的顺序。