Ich bekomme die allgegenwärtige Flasche wtform 400 Fehler, und habe andere Lösungen ausprobiert. Es hat zu Verbesserungen in meiner Form geführt, aber den Fehler nicht aufgehalten. Ich habe"Ungültige Anfrage Der Browser (oder Proxy) hat eine Anfrage gesendet, die dieser Server nicht verstehen konnte." Flask Login
templates/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')
die 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)
die Drucke aussehen
<app.forms.RegistrationForm object at 0x7ff762e11790>
[email protected]
123456
1234
False
genau wie ich erwartet habe. Ich nahm an, dass ich eine Neuwiedergabe der Seite mit einer Fehlermeldung von "Passwords muss übereinstimmen" basierend auf dem Validator des password
-Felds erhalten werde. Was kann ich tun, damit dieses Formular fehlschlägt und die Seite neu gerendert wird? Danke
Sie haben eine Reihe von url_for-Anweisungen im Code. Haben Sie die entsprechenden Funktionen im Modul views.py und sind sie korrekt registriert? – lesingerouge