文章内容
2020/9/16 16:05:33,作 者: 黄兵
Flask before_request after_request
除了使用@app.route()
装饰器到函数/视图的静态和动态路径之外,Flask还为我们提供了几个强大的装饰器,以补充我们使用创建的路径.route()
。在本文中,我们将探讨在Flask中使用装饰器在请求之前和之后运行函数的一些方法
before_request
after_request
在解释这些之前,让我们写一个非常基本的Flask应用程序:
from flask import Flask app = Flask(__name__) @app.route("/") def index(): print("Index running!") if __name__ == "__main__": app.run()
因此,无论何时发出对根目录(“ /”)的请求,我们都会看到如下所示的输出。
Index running!
我们使用before_request
和after_request
如果要分别在请求之前和之后执行任何特定任务。
before_request
该before_request
装饰可以让我们的任何请求之前执行的功能。也就是说,用.before_request()
装饰器定义的功能将在发出每个请求之前执行。
我们可以通过以下方式装饰函数@app.before_request
:
@app.before_request def before_request_func(): print("before_request executing!")
添加此函数后,每当尝试向路由(“ /”)发出请求时,我们都会得到以下输出。
before_request executing! Index running!
我们可以在以下情况下使用此功能:
- 打开数据库连接。
- 跟踪用户动作
- 通过在加载下一页之前记住用户访问的最后一页来添加“后退按钮”功能
- 确定用户权限等……
before_request
不需要返回任何内容,但是,如果before_request
函数返回值,则将其视为该视图的返回值,并停止任何进一步的请求处理。
after_request
该after_request
装饰工程以同样的方式作为before_request
装饰,只是,它让我们每个请求后执行的功能。
让我们通过将以下功能添加到应用程序中来查看示例:
@app.after_request def after_request_func(response): print("after_request executing!") return response
通过向应用程序上的任何路由发出请求,我们将看到以下输出:
before_request executing! Index running! after_request executing!
after_request
函数必须获取并返回Flask响应类的实例。
此功能可用于以下情况:
- 关闭数据库连接
- 提醒用户应用程序中的更改等。
after_request
如果应用程序引发异常,则装饰有任何功能的函数均不会运行。
完整代码程序:
from flask import Flask app = Flask(__name__) @app.before_request def before_request_func(): print("before_request executing!") @app.after_request def after_request_func(response): print("after_request executing!") return response @app.route("/") def index(): print("Index running!") if __name__ == "__main__": app.run()
评论列表