Я сейчас работаю над своим 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 %}