条件WTFform字段

时间:2016-02-24 18:03:08

标签: python flask wtforms flask-wtforms

我正在研究一个烧瓶应用程序并使用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。怎么办呢?

1 个答案:

答案 0 :(得分:1)

您可以为此创建两个表单,第一个BaseRegistrationForm包含username, passwordSomeOtherForm,它们将从第一个继承,并拥有自己的email字段。 对我而言,这似乎是更好的方法,因为当一年后有人必须阅读你的代码(甚至你)时,它会更容易理解