Ошибка возврата к фляге "Функция просмотра не возвращала ответ"

У меня есть представление, которое вызывает функцию для получения ответа. Однако он дает ошибку View function did not return a response. Как это исправить?

from flask import Flask
app = Flask(__name__)

def hello_world():
    return 'test'

@app.route('/hello', methods=['GET', 'POST'])
def hello():
    hello_world()

if __name__ == '__main__':
    app.run(debug=True)

Когда я пытаюсь проверить его, добавив статическое значение вместо вызова функции, он работает.

@app.route('/hello', methods=['GET', 'POST'])
def hello():
    return "test"

Ответ 1

Следующий ответ не возвращается:

@app.route('/hello', methods=['GET', 'POST'])
def hello():
    hello_world()

Вы хотите сказать...

@app.route('/hello', methods=['GET', 'POST'])
def hello():
    return hello_world()

Обратите внимание на добавление return в эту фиксированную функцию.

Ответ 2

Независимо от того, какой код выполняется в функции представления, представление должно возвращать значение, которое Flask распознает как ответ. Если функция ничего не возвращает, это эквивалентно возвращению None, что является недопустимым ответом.

Помимо полного исключения оператора return, другой распространенной ошибкой является возвращение ответа только в некоторых случаях. Если ваше представление имеет другое поведение в зависимости от if или try/except, вам нужно убедиться, что каждая ветвь возвращает ответ.

Этот неправильный пример не возвращает ответ на запросы GET, ему нужен оператор возврата после if:

@app.route("/hello", methods=["GET", "POST"])
def hello():
    if request.method == "POST":
        return hello_world()

    # missing return statement here

Этот правильный пример возвращает ответ об успехе и неудаче (и регистрирует ошибку для отладки):

@app.route("/hello")
def hello():
    try:
        return database_hello()
    except DatabaseError as e:
        app.logger.exception(e)
        return "Can't say hello."