2016-04-28 14 views
1

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

+0

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

Antwort

1

register.html:

<form action="{{url_for('register')}}" </form> 

, wenn Sie das Formular abschicken, url_for an Ihrem views.py für register Funktion aussehen wird. zweite Sache, die Sie eine Funktion mit dem Namen haben müssen: awaiting_approval, weil Sie diese Ansicht Funktion nach Post erfolgreich umleiten wurde.