我现在正在开发Flask Web项目,并且正在使用flask-wtforms来注册用户。
我有一个问题。当我填写所有字段并单击“注册” 按钮时,我看到有关某些字段为空的警告。我使用DataRequired()
和Regexp()
验证器。
我需要获取有关一个团队和四个成员的数据,因此我使用SignUpTeamForm
来注册一个团队,并使用SignUpMemberForm
来注册四个成员中的每个成员。首先在sign_up.html
模板中放置SignUpMemberForm
,然后在for
周期中放置每个成员的表单,更改字段名称。
我尝试过:
我在会员注册表单中使用<input>
标签来更改每个会员输入字段的ID和名称。
现在,代码:
@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")
{% 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 %}