2016-07-15 27 views
1

Ich erstelle ein Formular mit Flask-WTForms.Überprüfen Sie, dass ein WTForms BooleanField aktiviert ist

Ich verwende ein BooleanField, damit ein Benutzer angeben kann, dass sie Bedingungen zustimmen.

Ich kann das BooleanField bei der Übergabe nicht überprüfen, um sicherzustellen, dass es überprüft wurde. Ich habe versucht, Required(), DataRequired() und benutzerdefinierte Validierung, aber in jedem Fall habe ich keinen Validierungsfehler erhalten.

Hier sind die Schrauben und Muttern der Anwendung:

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) 

Und hier ist die index.html Vorlage ...

{% 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 %} 

Anregungen dankbar empfangen würden.

+0

Sie wahrscheinlich dieses Beispiel abspecken konnte und es ein wenig verlängern - ein einfacher Server, der nur ein einfaches Formular und einen Handler zurückgibt, der die Validierung ausgibt. Das würde es zu einem [mcve] –

+0

machen Beachten Sie, dass 'Required' ein veralteter Alias ​​von' DataRequired' ist, verwenden Sie einfach den späteren. – davidism

+0

Danke Leute für diese Kommentare. Obwohl das DataRequired() im einfachen Fall funktioniert, scheint es leider nicht zu funktionieren, wenn es mit Bootstrap gerendert werden soll. – autoanalytix

Antwort

3

Werke für me- Sie DataRequired() verwenden müssen (Required ist veraltet):

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) 

Vorlage:

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

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

Dogbeh, Vielen Dank dafür. Ihre Mini-App funktioniert für mich, aber die Verwendung von DataRequired() in meiner tatsächlichen Anwendung funktioniert nicht. Ich vermute ein Bootstrap-Rendering-Problem ?! Ich werde nachforschen und Bericht erstatten. – autoanalytix