【问题标题】:Flask - access the request in after_request or teardown_requestFlask - 在 after_request 或 teardown_request 中访问请求
【发布时间】:2015-03-12 09:26:20
【问题描述】:

我希望能够在返回 HTTP 调用的响应之前访问请求对象。 我想通过“teardown_request”和“after_request”访问请求:

from flask import Flask
...
app = Flask(__name__, instance_relative_config=True)
...

@app.before_request
def before_request():
    # do something

@app.after_request
def after_request(response):
    # get the request object somehow
    do_something_based_on_the_request_endpoint(request)

@app.teardown_request
def teardown_request(response):
    # get the request object somehow
    do_something_based_on_the_request_endpoint(request)

我看到我可以将请求添加到 g 并执行以下操作:

g.curr_request = request

@app.after_request
def after_request(response):
    # get the request object somehow
    do_something_based_on_the_request_endpoint(g.curr_request)

但上面的内容似乎有点奇怪。我确信有更好的方法来访问请求。

谢谢

【问题讨论】:

  • 您能否通过以下方式澄清您的问题:1)添加相关的导入语句 2)“我想通过“teardown_request”和“after_request”访问:”是什么意思?
  • @joostdevries - 我编辑了这个问题。我想在发送响应之前根据原始请求进行一些操作(在我的情况下,我需要根据请求 URL 处理与数据库事务相关的一些事情......),但我不确定如何访问“after_request”和“teardown_request”中的请求
  • 使用 g 保留对请求的引用有什么问题,或者更好的是,只保留 url 或 url 的相关部分?鉴于此处推荐的模式与您想要的相反(修改 before_request() 方法中的响应),使用 g 似乎是一个简单而合理的解决方案:flask.pocoo.org/docs/0.10/patterns/deferredcallbacks
  • 我认为有更好的方法,但我绝对可以使用 g。
  • 实际上 - 我再次调试并看到我确实在 teardown/after_request bu 中使用:from flask import request

标签: python flask flask-restful


【解决方案1】:

解决办法很简单——

from flask import request

@app.after_request
def after_request(response):
    do_something_based_on_the_request_endpoint(request)
    return response

【讨论】:

  • 我可以在请求单个应用程序路由后使用吗?因为我有 10 个应用程序路由,并且我想在请求单个应用程序路由后运行。你能帮忙吗?
  • @KhakharShyam 你可以使用 after_this_request。
【解决方案2】:

也可以试试 teardown_request(异常)。这会执行“无论是否有异常”。查看文档:http://flask.pocoo.org/docs/0.12/api/#flask.Flask.teardown_request

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多