4

私が求めていることは、実際には非常に単純です。いくつかのフィールドと送信ボタンとキャンセルボタンを含むフォームを作成したいと考えています。quick_formテンプレートのオーバーヘッドを低く抑えるために、Flask-Bootstrap のテンプレート関数を使用したいと考えています。私のフォームは次のようになります。

from flask_wtf import FlaskForm
from wtforms.validators import Required, Length


class SequenceForm(FlaskForm):
    name = StringField('Name:', validators=[Required(), Length(1, 128)])

    # some other fields here

    submit = SubmitField('submit')
    cancel = SubmitField('cancel')

テンプレート:

{% extends 'base.html' %}
{% import 'bootstrap/wtf.html' as wtf %}

{% block content %}
  <div class="container">
    <form method="POST">
      <div class="row">
        <div class="col-xs-12">
          {{ wtf.quick_form(form, button_map={'submit': 'primary'}) }}
        </div>
      </div>
    </form>
  </div>
{% endblock %}

疑わしいように、送信時に入力値を検証して受け入れ、キャンセル時に検証をスキップしたいと考えています。したがって、私のビュー関数は期待どおりに見えます。

@main.route('sequence/', methods=['GET', 'POST'])
def sequence():
    form = SequenceForm()
    if request.method == 'POST':
        if 'submit' in request.form:
            if form.validate_on_submit():
                print(form.duration.data)
        else:
            return redirect(url_for('main.index'))
    return render_template('sequence.html', form=form)

キャンセルが押された場合、論理的に検証は行われず、リダイレクトが行われます。ただし、クライアント側の検証のために送信またはキャンセルを押しても、ビュー関数が呼び出されないという問題が発生します。

<input class="form-control" id="name" name="name" required="" type="text" value="">

WTForms でクライアント側の検証を無効にする方法はありますか?

4

4 に答える 4

1

属性のレンダリングを禁止できますrequired

class MyTextInput(wtforms.widgets.TextInput):
    def __call__(self, field, **kwargs):
        kwargs['required'] = False
        return super().__call__(field, **kwargs)

Python2 の場合、次のように引数を追加します。super(MyTextInput, self)

その後:

name = StringField('Name:', validators=[Required(), Length(1, 128)], widget=MyTextInput())
于 2016-12-24T09:14:49.687 に答える