ИСПРАВЛЕНО: Flask Валидаторы и редирект не работают - PullRequest
0 голосов
/ 05 мая 2020

Final Edit: я понял, что проблема была в моем html, и я неправильно написал начальную часть моей страницы регистрации. Я неправильно написал метод формы. Возможно, это поможет кому-то в будущем, если у них возникнет такая же проблема.

<div class="content-section">
        <form method="POST" action="">

Исходное сообщение: Я не понимаю, что происходит. Я использую vscode и python 3.8

Валидатор DataRequired, похоже, работает нормально, но валидаторы Email и EqualTo не работают. Vscode сообщает мне, что с моим кодом forms.py есть три проблемы: неразрешенный import 'flask_wtf'; неразрешенный импорт wtforms; неразрешенный импорт wtforms.validators. Я считаю это странным, поскольку валидатор DataRequired, похоже, работает нормально.

Также, когда форма отправлена, перенаправление не работает. Страница просто остается на странице регистрации вместо перенаправления на главную.

Изменить: из валидаторов валидатор DataRequired - единственный, который работает и отображает любое сообщение. Ничего не происходит ни с одним из других, и он позволит отправить, если другие не будут завершены (Длина, Электронная почта, EqualTo)

forms.py:

from wtforms import StringField, PasswordField, SubmitField, BooleanField
from wtforms.validators import DataRequired, Length, Email, EqualTo

class RegistrationForm(FlaskForm):
    name = StringField('Your Name', 
                        validators=[ DataRequired(), Length(min=2,max=50) ])
    email = StringField('Email', validators=[DataRequired(), Email() ])
    password = PasswordField('Password', validators=[DataRequired()])
    confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
    submit = SubmitField('Sign Up')

class LoginForm(FlaskForm):
    email = StringField('Email', validators=[DataRequired(), Email() ])
    password = PasswordField('Password', validators=[DataRequired()])
    remember = BooleanField('Remember Me')
    submit = SubmitField('Login')

код для приложения

from flask import Flask, escape, request, render_template, url_for, flash, redirect
from forms import RegistrationForm, LoginForm

app = Flask(__name__)

tasks = ['first task', 'second task']

app.config['SECRET_KEY'] = 'sercretKey'



@app.route('/')
@app.route('/home')
def home():
   return render_template('home.html', tasks=tasks)

@app.route('/about')
def about():
    return render_template('about.html', title='About')

@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        flash(f'Account created for {form.name.data}!', 'success')
        return redirect( url_for('home'))
    return render_template('register.html', title = 'Register', form = form)

@app.route('/login')
def login():
    form = LoginForm()
    return render_template('login.html', title = 'Login', form = form)



if __name__ == '__main__':
    app.run(debug=True)
...