我正在研究一个烧瓶应用程序并使用flask-wtf来帮助管理我的表单。我有以下简化形式:
<form id="registerForm" class="form form-register" method="POST" action="" role="form">
{{ form.hidden_tag() }}
<div class="form-group">
{{form.username.label}}
{{form.username(placeholder="Username", class_="form-control")}}
</div>
<div class="form-group">
{{form.email.label}}
{{form.email(placeholder="Email", class_="form-control")}}
</div>
<div class="form-group">
{{form.password.label}}
{{form.password(placeholder="Password", class_="form-control")}}
有两种方法可以在网站上注册 - 无论是否有电子邮件令牌。
如果确认电子邮件,则用户会收到包含以下内容的电子邮件:
http://127.0.0.1:5000/register/ImNsdWVtYXJpbmUzQG1haWxpbmF0b3IuY29tIg.Ca9oUQ.bRJmGYQ1wNqfcQFx1pYyoCEy2oM
否则,在网站上,用户可以点击:
http://127.0.0.1:5000/register
以下代码可以处理这两种情况:
@blueprint.route("/register/", defaults={'token': ''}, methods=['GET', 'POST'])
@blueprint.route("/register/<token>", methods=['GET', 'POST'])
def register(token):
form = RegisterForm(request.form, csrf_enabled=False)
email = confirm_token(token)
if form.validate_on_submit():
new_user = User.create(username=form.username.data,
email=form.email.data,
password=form.password.data,
active=True)
如果使用令牌,我想只显示和验证2个表单字段(用户名,密码)。如果没有令牌 - 全部3。怎么办呢?
答案 0 :(得分:1)
您可以为此创建两个表单,第一个BaseRegistrationForm
包含username, password
和SomeOtherForm
,它们将从第一个继承,并拥有自己的email
字段。
对我而言,这似乎是更好的方法,因为当一年后有人必须阅读你的代码(甚至你)时,它会更容易理解