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)