2016-04-28 5 views
1

Я получаю ошибку вездесущей колбы 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. Что я могу сделать, чтобы эта форма не удалась и переделала страницу? Спасибо

+0

У вас есть ряд инструкций url_for в коде. есть ли у вас соответствующие функции в модуле views.py и они зарегистрированы правильно? – lesingerouge

ответ

1

register.html:

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

когда вы отправите форму, url_for будет выглядеть на вашем views.py для register функции. Во-вторых, у вас должна быть функция с именем: awaiting_approval, потому что вы перенаправляете эту функцию просмотра после успешной публикации.