У вашего вида return jsonify(...)
в конце его. jsonify
возвращает Response
с данными JSON, он не возвращает исходные данные напрямую. Вы можете повторно проанализировать данные JSON из объекта ответа, или вы можете отделить функцию, которая генерирует данные из представления, которое возвращает ответ.
from flask import json
r = get_promoter(id)
data = json.loads(r.data, encoding=r.charset))
# or separate the data from the view
def get_promoter(id):
return json.dumps(...)
@app.route(...)
def promoter(id):
return jsonify(**get_promoter(id))
@app.route(...)
def other_view():
promoter = get_promoter(400617)
...
Другие виды могут возвращать другие типы данных. jsonify
происходит с возвратом объекта Response
, но другие допустимые возвращаемые значения являются строками (например, от render_template
) и кортежей. Любой из них будет преобразован в Responses
, когда Flask обрабатывает запрос, но когда только вызывается функция просмотра, они возвращают все, что они возвращают, что может оказаться a Response
.
«Возвращаемое значение функции просмотра всегда будет автоматически обернуто» неточно. 'route' просто записывает функцию и возвращает ее, она не добавляет никакой последующей обработки. Выполнение запроса возвращает ответ, а некоторые представления могут возвращать 'Response', а не строку, но просто украшение функции не возвращает ответ. – davidism
Совершенно верно, я пропустил это. Я хотел сосредоточиться на «автоматически», а не на «всегда». Я отредактирую это в своем ответе. – HelloWorld