我已经生成了一个烧瓶表单来在我的crud应用程序中注册一个新用户。但是,即使在填充了所有数据字段之后,flask表单仍然显示错误。我甚至在html代码中包含了{{ form.hidden_tag() }}
。而且,这种不正常的行为是突然开始的。当我添加了两个新用户时,前两次运行良好。
以下是我正在使用的代码-routes.py
@app.route("/register", methods=['GET','POST'])
def register():
if current_user.is_authenticated:
return redirect(url_for('index'))
form = RegistrationForm()
regpass=app.config['REGISTRATION_KEY']
if form.validate_on_submit():
if form.passkey.data==regpass:
user = User(username=form.username.data, email=form.email.data)
user.set_password(form.password.data)
db.session.add(user)
db.session.commit()
flash('Congratulations, you are now a registered user!')
return redirect(url_for('login'))
flash('Invalid Passkey!')
return redirect(url_for('register'))
return render_template('register.html', title='Register', form=form)
forms.py
。-class RegistrationForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired()])
password2 = PasswordField(
'Repeat Password', validators=[DataRequired(), EqualTo('password')])
passkey = PasswordField('Pass Key', validators=[DataRequired()])
submit = SubmitField('Register')
def validate_username(self, username):
user = User.query.filter_by(username=username.data).first()
if user is not None:
raise ValidationError('Please use a different username.')
def validate_email(self, email):
user = User.query.filter_by(email=email.data).first()
if user is not None:
raise ValidationError('Please use a different email address.')
config.py
。-import os
basedir = os.path.abspath(os.path.dirname(__file__))
class Config(object):
SECRET_KEY = os.environ.get('SECRET_KEY')
REGISTRATION_KEY=os.environ.get('REGISTRATION_KEY')
HTML格式-
{% extends "base.html" %}
{% block content %}
<br><hr>
<div class="container">
<div class="row">
<div class="col-md-12">
<h1 id="signin">
Register!
</h1>
<hr>
</div>
</div>
<form action="" method="post">
{{ form.hidden_tag() }}
<div class="row" id="form">
<div class="col-md-12">
{{ form.username.label }}<br>
{{ form.username(size=32 , class_='form-fields') }}<br>
{% for error in form.username.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
<br>
{{ form.email.label }}<br>
{{ form.email(size=64, class_='form-fields') }}<br>
{% for error in form.email.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
<br>
{{ form.password.label }}<br>
{{ form.password(size=32, class_='form-fields') }}<br>
{% for error in form.password.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
<br>
{{ form.passkey.label }}<br>
{{ form.passkey(size=32, class_='form-fields') }}<br>
{% for error in form.password2.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
<br>
</div>
</div>
<div class="row">
<div class="col-md-12">
<span id='submit-field'><p >{{ form.submit(class_='submit-button-login') }}</p></span>
</div>
</div>
</form>
</div>
{% endblock %}
如您所见,我在
config.py
文件中有注册密钥。在启动烧瓶应用程序之前,我在终端中设置了REGISTRATION_KEY
。这是显示错误的图像。
谢谢和问候。
最佳答案
在flask表单中,您设置了password2字段,但在html中,您没有声明表单标记,因此出现错误。添加{{ form.password2...
将解决问题。
关于python - 提交时如何验证Flask表单?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49673546/