Моя среда:
Python3.7
Колба == 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 - это что-то еще?
process_response () также вызывается, когда rv is None
почему это так?
он выглядит как preprocess_request (), вызывает before_request_funcs
, а rv - это возвращаемое значение последнего before_request_function
... похоже, что rv не имеет ничего общего с диспетчерским запросом, но я знаю, что это должно быть что-то ... скажи мне, в чем я не прав.
Есть еще куча вещей, которых я не понимаю в preprocess_request (), make_response (), dispatch_request (), process_response (). Я думаю, что rv и process_request () играют отличные роли, но я не уверен. Я был бы более чем признателен, если бы вы также объяснили, что происходит на фоне.