Я получаю ошибку вездесущей колбы wtform 400 и пробовал другие решения. Это позволило улучшить мою форму, но не остановило ошибку. У меня есть«Плохой запрос Браузер (или прокси) отправил запрос, который этот сервер не мог понять». Кол-во логин
шаблоны/register.html:
{% extends "base.html" %}
{% block title %}Register{% endblock %}
{% block content %}
<h2> Welcome to the status page</h2>
<br>
<form action="/register" method="post" name="register_user">
{{ form.hidden_tag() }}
<h4>Register</h4>
<p>
Email:<br>
{{ form.email }}<br>
{% for error in form.email.errors %}
<p><span style="color: red">[{{ error }}]</span></p>
{% endfor %}
Password:<br>
{{ form.password }}<br>
{% for error in form.password.errors %}
<p><span style="color: red">[{{ error }}]</span></p>
{% endfor %}
Confirm password:<br>
{{ form.confirm }}<br>
{% for error in form.confirm.errors %}
<p><span style="color: red">[{{ error }}]</span></p>
{% endfor %}
</p>
<p><input type="submit" name="register" value="Submit"></p>
</form>
<p><a href="{{ url_for('login') }}">Log in</a></p>
<script type="text/javascript">
</script>
{% endblock %}
forms.py:
from flask.ext.wtf import Form
from wtforms import StringField, BooleanField, TextField, PasswordField, validators
from wtforms.validators import Required
class RegistrationForm(Form):
# name = TextField('Your name', [validators.Length(min=2, max=60)])
email = TextField('Email Address', [validators.Length(min=6, max=35)])
password = PasswordField('New Password', [
validators.Required(),
validators.EqualTo('confirm', message='Passwords must match')
])
confirm = PasswordField('Confirm Password')
views.py:
@application.route('/register', methods=['GET', 'POST'])
def register():
form = RegistrationForm(request.form)
print(form)
print(form.email.data)
print(form.password.data)
print(form.confirm.data)
print(form.validate())
if request.method == 'POST' and form.validate():
user = User(email=form.email.data, password=form.password.data)
user.save()
flash('Thanks for registering')
return redirect(url_for('awaiting_approval'))
return render_template('register.html', form=form)
отпечатки выглядят как
<app.forms.RegistrationForm object at 0x7ff762e11790>
[email protected]
123456
1234
False
точно так, как я ожидал. Я предположил, что получаю повторный рендеринг страницы с сообщением об ошибке «Пароли должны совпадать» на основе валидатора поля password
. Что я могу сделать, чтобы эта форма не удалась и переделала страницу? Спасибо
У вас есть ряд инструкций url_for в коде. есть ли у вас соответствующие функции в модуле views.py и они зарегистрированы правильно? – lesingerouge