Flask Forms, если оператор возвращает

Я создаю приложение flask, и когда я создаю маршрут fee_handler, я продолжаю получать сообщение об ошибке, хотя я уже создавал такой в ​​прошлом. Я не уверен, в чем проблема.

@app.route('/handle_form', methods=['POST', 'GET'])
def fee_handler():
    if request.method == "POST":
        x = request.form['x']
        y = request.form['y']
        z = request.form['z']
        a = request.form['a']
        fee.feeCreation(x, y, z, a)
        return render_template('result.html', x=x, y=y, z=z, a=a)

TypeError: The view function did not return a valid response. The function either returned None or ended without a return statement.

Если я перемещаю возврат в соответствие с if, я получаю ошибку локальной переменной.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
1 000
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Я полагаю, потому что вы ничего не возвращаете, если метод запроса - GET? Конечно, вы получите сообщение об ошибке, если попытаетесь вернуть переменные x, y, z and a вне области действия вашего оператора if, поскольку они не будут определены.

Ах, это имеет смысл, я только что проверил, и это GET, но я хочу сделать его POST, как мне этого добиться?

Ronald Arevalo 13.08.2018 16:38
POST будет типом запроса, когда пользователь отправит форму; по крайней мере так работает должен ..
amitchone 13.08.2018 16:39

Я понял это, в моем HTML есть ошибка, но, конечно, ценим ваш вклад!

Ronald Arevalo 13.08.2018 17:47

Используйте значения по умолчанию, а затем выдвиньте оператор return за пределы условия if.

Бывший:

@app.route('/handle_form', methods=['POST', 'GET'])
def fee_handler():
    x, y, z, a = None, None, None, None
    if request.method == "POST":
        x = request.form['x']
        y = request.form['y']
        z = request.form['z']
        a = request.form['a']
        fee.feeCreation(x, y, z, a)
    return render_template('result.html', x=x, y=y, z=z, a=a)

В этом случае может быть лучше создать два маршрута: один для обслуживания формы, а другой для получения значений и их передачи пользователю:

@app.route('/enter_values', methods=['GET'])
def enter_values():
   return flask.render_template('form_html.html')

@app.route('/handle_form', methods=['POST'])
def fee_handler():
  x = request.form['x']
  y = request.form['y']
  z = request.form['z']
  a = request.form['a']
  fee.feeCreation(x, y, z, a)
  return render_template('result.html', x=x, y=y, z=z, a=a)

В шаблоне form_html.html убедитесь, что параметр формы action указывает на /handle_form:

<form method='POST' action = '/handle_form'>
  ...
</form>

Я уже настроил его таким образом, оставил дескриптор формы вне исходного вопроса, проблема заключалась в том, что я поставил methods вместо method, эта синтаксическая ошибка вызвала мой запрос по умолчанию на GET, что, по-видимому, и будет делать фляга. Спасибо!

Ronald Arevalo 13.08.2018 17:50

Другие вопросы по теме