2016-02-28 82 views
0

我正在嘗試構建並使用瓶子提交表單。我的燒瓶登記表功能:FlaskWTF驗證器可以防止隱藏表單字段

Form類:

class RegisterForm(Form): 
    username = StringField('Username', validators=[DataRequired(), 
    email = StringField('Email', validators=[DataRequired(), Email(), Length(min=6, max=40)]) 

Jinja2的形式:

<h1>Register</h1> 
<br/> 
<form id="registerForm" class="form form-register" method="POST" action="" role="form"> 
     {{ form.hidden_tag() }} 
     {% for field in form %} 
      {% if field.data==None %} 
       {{ render_field(field) }} 
      {% endif %} 
     {% endfor %} 

註冊功能:

@blueprint.route("/register/", defaults={'token': ''}, methods=['GET', 'POST']) 
@blueprint.route("/register/<token>", methods=['GET', 'POST']) 
def register(token): 
    email = confirm_token(token) 
    form = RegisterForm(request.form, csrf_enabled=False, email=email) 
    if form.validate_on_submit(): 
    ....... 

我的計劃是我需要填充僅顯示領域出。在這種情況下,我已經收到了電子郵件,因此我不想顯示它,但有時我需要填寫電子郵件。這工作與Get請求預期,但上發佈的結果我得到:

Email - This field is required. 

我怎樣才能得到這個工作?

回答

1

你最好在服務器端有條件地刪除該字段。

class MagazineIssueForm(Form): 
    title = StringField() 
    year = IntegerField('Year') 
    month = SelectField(choices=MONTHS) 

def edit_issue(): 
    publication = get_something_from_db() 
    form = MagazineIssueForm(...) 

    if publication.frequency == 'annual': 
     del form.month 

    # render our form 

參見:http://wtforms.readthedocs.org/en/latest/specific_problems.html#removing-fields-per-instance

+0

謝謝,我會考慮這一點。 – user61629