我已经生成了一个烧瓶表单来在我的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
这是显示错误的图像。
python - 提交时如何验证Flask表单?-LMLPHP
谢谢和问候。

最佳答案

在flask表单中,您设置了password2字段,但在html中,您没有声明表单标记,因此出现错误。添加{{ form.password2...将解决问题。

关于python - 提交时如何验证Flask表单?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49673546/

10-09 07:45
查看更多