如何为特定视图创建Flask before_request视图?

kra*_*r65 3 python before-filter flask

我正在使用Flask构建一个系统,它包含一个应用程序的网站和api.我为webview定义了一个before_request,如下所示:

@app.before_request
def before_request():
    g.user = current_user
    # And I do some more stuff here..
Run Code Online (Sandbox Code Playgroud)

我在基于文件夹的结构中得到了我的观点,如下所示:

views (folder)
---------------
  - __init__.py
  - apiviews.py
  - webviews.py
Run Code Online (Sandbox Code Playgroud)

因为我正在为api使用基于令牌的登录系统,我现在想要为所有apiviews定义不同的before_request.有没有办法可以做到这一点?也许我需要定义装饰器或什么?欢迎所有提示!

Mar*_*ers 6

您不能将before_request钩子用于特定视图,而不能在同一个应用程序中使用.

您的选择是:

  • Blueprint为您的API和网站单独使用; 您可以注册before_request每个蓝图,它只会应用于该蓝图的视图.
  • 使用每视图装饰器而不是before_request.
  • 过滤before_request处理程序中的请求路径; if request.path.startswith(...)风格测试.

  • @Shafaq:在每个应该有不同行为的视图上使用装饰器。编写一个装饰器并使用“@decorator”将其应用到每个视图。 (2认同)