2016-07-15 13 views
1

Flask-WTFormsを使用してフォームを作成しています。WTForms BooleanFieldがチェックされていることを確認します。

私はBooleanFieldを使用しているため、ユーザーはそれらの用語に同意することを示すことができます。

投稿時にBooleanFieldを検証して、確認済みであることを確認できません。私は、Required()、DataRequired()とカスタム検証を使用しようとしましたが、いずれの場合も検証エラーを受け取っていません。ここで

は、アプリケーションのナットとボルト以下のとおりです。

from flask import Flask, render_template, session, redirect, url_for, flash 
from flask_wtf import Form 
from wtforms import BooleanField, SubmitField 
from wtforms.validators import Required, DataRequired 
from flask_bootstrap import Bootstrap 

app = Flask(__name__) 
app.config['SECRET_KEY'] = 'impossibletoknow' 

bootstrap = Bootstrap(app) 

class AgreeForm(Form): 
    agreement = BooleanField('I agree.', validators=[DataRequired()]) 
    submit = SubmitField('Submit') 


@app.route('/', methods=['GET', 'POST']) 
def index(): 
    form = AgreeForm() 
    if form.validate_on_submit(): 
     agreement = form.agreement.data 
     if agreement is True: 
      flash('You agreed!') 
     return redirect(url_for('index', form=form)) 
    form.agreement.data = None 
    agreement = False 
    return render_template('index.html', form=form) 


if __name__ == '__main__': 
    app.run(debug=True) 

そしてここでは、index.htmlのテンプレートです...

{% import "bootstrap/wtf.html" as wtf %} 

{% block content %} 
<div class="container"> 
    {% for message in get_flashed_messages() %} 
    <div class="alert alert-warning"> 
     <button type="button" class="close" data-dismiss="alert">&times;</button> 
     {{ message }} 
    </div> 
    {% endfor %} 
    {{ wtf.quick_form(form) }} 
</div> 
{% endblock %} 

任意の提案をありがたく受け取ったことになります。あなたがDataRequired()を使用する必要がありますME-ため

+0

おそらく、この例を下に削り取っし、それを少し拡張することができ - 簡単なフォームを返す単純なサーバーと、検証を出力するハンドラーです。それはそれを[mcve]にします –

+0

'Required'は' DataRequired'の廃止されたエイリアスです。 – davidism

+0

これらのコメントのおかげでみんな。残念ながら、DataRequired()は単純なケースで動作しましたが、Bootstrapでレンダリングしたい場合は動作しません。 – autoanalytix

答えて

3

ワークス(Requiredが廃止される予定です):

from flask import Flask, render_template 
from flask_wtf import Form 
from wtforms import BooleanField 
from wtforms.validators import DataRequired 

app = Flask(__name__) 
app.secret_key = 'STACKOVERFLOW' 

class ExampleForm(Form): 
    checkbox = BooleanField('Agree?', validators=[DataRequired(), ]) 

@app.route('/', methods=['post', 'get']) 
def home(): 
    form = ExampleForm() 
    if form.validate_on_submit(): 
     return str(form.checkbox.data) 
    else: 
     return render_template('example.html', form=form) 


if __name__ == '__main__': 
    app.run(debug=True, port=5060) 

テンプレート:

<form method="post"> 
    {{ form.hidden_tag() }} 
    {{ form.checkbox() }} 
    <button type="submit">Go!</button> 
</form> 

<h1>Form Errors</h1> 
{{ form.errors }} 
+0

ドッグベー、ありがとう。あなたのミニアプリは私のために働いていますが、私の実際のアプリケーションでDataRequired()を使用しても動作しません。私はブートストラップレンダリングの問題を疑っていますか?私は調査して報告します。 – autoanalytix

関連する問題