Bad request при отправке формы
Есть такая проблема: пишу мини-приложение с помощью flask-а и получаю ошибку bad request. Как это исправить? Вот отрывок кода:
@app.route('/', methods = ['POST', 'GET'])
def hello():
return render_template('hello.html')
@app.route('/start', methods = ['POST', 'GET'])
def start():
Slogin = request.form['login']
Spasswd = request.form['passwd']
auto_send_30(check_auth(Slogin, Spasswd), posl1, posl2, Slogin, Spasswd)
return render_template('good.html')
Я абсолютно уверен в том, что функции auto_send_30 и check_auth работают на 100% верно. И вот привожу код hello.html:
<!doctype html>
<html>
<head>
</head>
<body>
<h2>Test</h2>
<input type="text" name = 'login' required>
<input type="text" name = 'passwd' required>
<form action = '/start'><p><input value='Запустить шарманку' type='SUBMIT'></p></form>
</body>
</html>
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
- Передаваемые поля должны быть внутри общего тега
<form> - По умолчанию (если в теге
<form>не указан параметрmethod) данные передаются методомGET(внутри url запроса), и попадают вrequest.args. Чтобы данные попадали вrequest.form, нужно передавать методомPOST, для этого указать<form action = '/start' method='post'>. Критичные данные (такие как данные авторизации) лучше передавать именно черезPOST.
Пример шаблона:
<!doctype html>
<html>
<head>
</head>
<body>
<h2>Test</h2>
<form action = '/start' method='post'>
<input type="text" name = 'login' required>
<input type="text" name = 'passwd' required>
<p><input value='Запустить шарманку' type='SUBMIT'></p>
</form>
</body>
</html>
В коде для /start оставляете только обработку метода POST:
@app.route('/start', methods = ['POST'])
def start():
Slogin = request.form['login']
Spasswd = request.form['passwd']
auto_send_30(check_auth(Slogin, Spasswd), posl1, posl2, Slogin, Spasswd)
return render_template('good.html')