Я создаю приложение 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, я получаю ошибку локальной переменной.






Я полагаю, потому что вы ничего не возвращаете, если метод запроса - GET? Конечно, вы получите сообщение об ошибке, если попытаетесь вернуть переменные x, y, z and a вне области действия вашего оператора if, поскольку они не будут определены.
POST будет типом запроса, когда пользователь отправит форму; по крайней мере так работает должен ..
Я понял это, в моем HTML есть ошибка, но, конечно, ценим ваш вклад!
Используйте значения по умолчанию, а затем выдвиньте оператор 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, что, по-видимому, и будет делать фляга. Спасибо!
Ах, это имеет смысл, я только что проверил, и это
GET, но я хочу сделать егоPOST, как мне этого добиться?