Почему ни InputRequired, ни DataRequired flask валидатор не работает? - PullRequest
0 голосов
/ 11 апреля 2020

Я сейчас работаю над своим Flask веб-проектом и использую flask -wtforms для регистрации пользователей. И у меня есть проблема. Когда я заполняю все поля и нажимаю кнопку «Зарегистрироваться» , я вижу предупреждение о том, что некоторые поля пусты. Я использую DataRequired() и Regexp() валидаторы. Мне нужно получить данные о команде и о четырех участниках, поэтому я использую SignUpTeamForm для регистрации команды и SignUpMemberForm для регистрации каждого из четырех участников. В шаблоне sign_up.html сначала я помещаю SignUpMemberForm, а затем в цикле for помещаю форму каждого члена, меняя имена полей.

Я пытался:

  • удалить Regexp () vaildator
  • , поставив InputRequired () вместо DataRequired ()

Я использую <input> тег в формах регистрации участников для изменения идентификатора и имени полей ввода каждого участника.

Аналогичный вопрос

Теперь код:

Зарегистрироваться 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 %}
...