为什么InputRequired和DataRequired烧瓶验证程序都不起作用?

时间:2020-04-11 10:18:42

标签: web flask jinja2 flask-wtforms werkzeug

我现在正在开发Flask Web项目,并且正在使用flask-wtforms来注册用户。 我有一个问题。当我填写所有字段并单击“注册” 按钮时,我看到有关某些字段为空的警告。我使用DataRequired()Regexp()验证器。 我需要获取有关一个团队和四个成员的数据,因此我使用SignUpTeamForm来注册一个团队,并使用SignUpMemberForm来注册四个成员中的每个成员。首先在sign_up.html模板中放置SignUpMemberForm,然后在for周期中放置每个成员的表单,更改字段名称。

我尝试过:

  • 删除Regexp()验证程序
  • 使用InputRequired()代替DataRequired()

我在会员注册表单中使用<input>标签来更改每个会员输入字段的ID和名称。

Similar question

现在,代码:

注册flask app.py功能

@app.route("/sign_up", methods=["GET", "POST"])

def sign_up():
    team_form = SignUpTeamForm()
    member_form = SignUpMemberForm()
    params = dict()
    params["title"] = "Sign Up"
    params["form_team"] = team_form
    params["form_member"] = member_form
    if team_form.validate_on_submit() and member_form.validate_on_submit():
        return "success"
    return render_template("sign_up.html", **params)

形成常量

DATA_REQUIRED_VALIDATOR = [InputRequired(message="It's required field")]
IS_NAME_VALIDATOR = [Regexp(regex="\b([A-Z])[a-z]+\b", message="Wrong name format")]

注册会员表格类

class SignUpMemberForm(FlaskForm):
    name = StringField("Name", validators=IS_NAME_VALIDATOR + DATA_REQUIRED_VALIDATOR)
    surname = StringField("Surname", validators=IS_NAME_VALIDATOR + DATA_REQUIRED_VALIDATOR)
    school = StringField("School", validators=DATA_REQUIRED_VALIDATOR)

注册团队表格课程

class SignUpTeamForm(FlaskForm):
    nickname = StringField("Nickname", validators=DATA_REQUIRED_VALIDATOR)
    password = PasswordField("Password", validators=DATA_REQUIRED_VALIDATOR)
    team_name = StringField("Team name", validators=DATA_REQUIRED_VALIDATOR)
    grade = SelectField("Grade", choices=[(5, "5"), (6, "6"), (7, "7")], coerce=int)

    submit = SubmitField("Submit")

最后,sign_up.html Jinja2模板

{% extends "base.html" %}
{% block content %}
    <h1>Sign Up</h1>
    <form method="post">
        {{ form_team.hidden_tag() }}

        {# Nickname #}
        <p>
            {{ form_team.nickname(class="form-control",
                               placeholder=form_team.nickname.label.text) }}<br>
            {% for error in form_team.nickname.errors %}
                <div class="alert alert-danger" role="alert">
                    {{ error }}
                </div>
            {% endfor %}
        </p>

        {# Password #}
        <p>
            {{ form_team.password(class="form-control",
                                  placeholder=form_team.password.label.text) }}<br>
            {% for error in form_team.password.errors %}
                <div class="alert alert-danger" role="alert">
                    {{ error }}
                </div>
            {% endfor %}
        </p>

        {# Team name #}

        <p>
            {{ form_team.team_name(class="form-control",
                                   placeholder=form_team.team_name.label.text) }}<br>
            {% for error in form_team.team_name.errors %}
                <div class="alert alert-danger" role="alert">
                    {{ error }}
                </div>
            {% endfor %}
        </p>

        {# Grade select #}
        <p>
            {{ form_team.grade.label }}<br>
            {{ form_team.grade(class="form-control") }}<br>
            {% for error in form_team.grade.errors %}
                <div class="alert alert-danger" role="alert">
                    {{ error }}
                </div>
            {% endfor %}
        </p>

        {# Member sign up form #}
        {% for i in ["1", "2", "3", "4"] %}
            <div class="container" style="background: #f2f2f2">
                <h3>Member № {{ loop.index }}</h3>

                {# Member Name #}

                <p>
                    <input class="form-control"
                           id="{{ "member" + i + "_name" }}"
                           name="{{ "member" + i + "_name" }}"
                           placeholder="{{ form_member.name.label.text }}"
                           required>
                    <br>

                    {% for error in form_member.name.errors %}
                        <div class="alert alert-danger" role="alert">
                            {{ error }}
                        </div>
                    {% endfor %}
                </p>

                {# Member Surname #}

                <p>
                    <input class="form-control"
                           id="{{ "member" + i + "_surname" }}"
                           name="{{ "member" + i + "_surname" }}"
                           placeholder="{{ form_member.surname.label.text }}"
                           required>
                    <br>

                    {% for error in form_member.surname.errors %}
                        <div class="alert alert-danger" role="alert">
                            {{ error }}
                        </div>
                    {% endfor %}
                </p>

                {# Member's school #}

                <p>
                    <input class="form-control"
                           id="{{ "member" + i + "_school" }}"
                           name="{{ "member" + i + "_school" }}"
                           placeholder="{{ form_member.school.label.text }}"
                           required>
                    <br>

                    {% for error in form_member.school.errors %}
                        <div class="alert alert-danger" role="alert">
                            {{ error }}
                        </div>
                    {% endfor %}
                </p>
            </div>
        {% endfor %}

        <p>{{ form_team.submit(type="submit", class="btn btn-primary") }}</p>
    </form>
    <br>
{% endblock %}

0 个答案:

没有答案
相关问题