文章内容

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_requestafter_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()

文章来源:Flask: Before and After request Decorators

分享到:

发表评论

评论列表