gpt4 book ai didi

python-3.x - flask 测试 : preprocess_request(), dispatch_request()

转载 作者:行者123 更新时间:2023-12-03 16:55:47 27 4
gpt4 key购买 nike

我的环境:

Python3.7
Flask==1.0.2
pytest==4.3.1



我正在寻找一种在 pytest 函数中检索请求对象和响应对象的方法。然后我遇到了这个单元测试片段。

http://flask.pocoo.org/snippets/58/

下面是我所做的。
def test_busking(session, monkeypatch, report=Report()):

with app.test_request_context('/busking/zones'):
# call the before funcs
rv = app.preprocess_request()
if rv != None:
response = app.make_response(rv)
else:
# do the main dispatch
rv = app.dispatch_request()
response = app.make_response(rv)

# now do the after funcs
response = app.process_response(response)

assert flask.request
assert response

它在我的环境中运行良好。我能够得到两个对象。我的问题是什么...
  • dispatch_request() 仅在 rv is None 时被调用.当 rv 是别的东西时,为什么不呢?
  • rv is None 时也会调用 process_response()这是为什么?
  • 它看起来像 preprocess_request() 调用 before_request_funcs rv 是最后一个 before_request_function 的返回值...看起来 rv 与调度请求无关,但我知道它必须是什么...告诉我我错了什么。

  • 在 preprocess_request()、make_response()、dispatch_request()、process_response() 中还有很多我不明白的东西。我认为 rv 和 process_request() 正在发挥重要作用,但我不确定。如果您还解释背景情况,我将非常感激。

    最佳答案

    我不是 Flask 专家,所以这个答案可能会遗漏一些要点,但我认为这足以帮助澄清您的情况:

  • 如果一个 before_request函数返回的不是 None ,它被视为 View 的响应,因此不再进行处理,请参阅preprocess_request's doc
  • process_response调用after_request方法,无论响应内容如何都会调用它 (AFAIK)
  • 根据上面链接的同一个文档,我会说 rv是第一个非Nonebefore_request 收到的结果,不是最后一个,只要一个非 None返回,处理停止。

  • 乍一看,我会说这是事情的顺序:
  • preprocess_request :调用before_request函数顺序
  • 只要其中一个返回不同于 None 的内容,停止调用其余的并跳转到(4)
  • dispatch_request :调用与路由规则相关的方法
  • make_response :准备Response基于先前结果的对象(此处为 rv )
  • process_response :调用after_request Response 的函数对象
  • 关于python-3.x - flask 测试 : preprocess_request(), dispatch_request(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56815553/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com