Flask WTF
Install
pip install flask-wtf
Create form
Install
pip install flask-wtf
Create form
- Create file in root path Ex. survey_form.py
from flask_wtf import Form
from wtforms.fields import StringField
# from flask.ext.wtf.html5 import URLField
from flask_wtf.html5 import URLField
from wtforms.validators import DataRequired, url
class SurveyForm(Form):
signum = StringField('signum')
comments = StringField('comments')
url = URLField('url', validators=[DataRequired(), url()])
In controller app.py
Import the Form, it takes the file name- from survey_form import SurveyForm
@app.route('/survey_wtf', methods=['GET', 'POST'] )
def survey_wtf():
form = SurveyForm()
if form.validate_on_submit():
# url = form.url.data
signum = form.signum.data
comments = form.comments.data
flash("Survey answered from '{}'".format(signum))
else :
flash("Error")
return render_template('survey_form.html', title_obj=Title(),form=form)
In the view
- include always {{form.hidden_tag()}}
- define attributes {{form.signum(size=10)}}
- handle errors
<p {% if form.signum.errors %} class="error" {% endif%} >
Signum
{{form.signum(size=10)}}
</p>
Complete code:
<form action="" method="POST">
{{form.hidden_tag()}}
<article>
<p {% if form.signum.errors %} class="error" {% endif%} >
Signum
{{form.signum(size=10)}}
</p>
<p>
<ul>
{% for error in form.signum.errors %}
<li>{{error}}</li>
{% endfor%}
</ul>
</p>
<!-- <p>
Problem
<input type="text" name="engineer">
</p> -->
<p> Comments
{{form.comments(size=10)}}
</p>
<p>
<button type="submit">Send Survey</button>
</p>
</article>
</form>
Custom validation
In the class override the method validate
class SurveyForm(Form):
signum = StringField('signum', validators=[DataRequired()])
comments = StringField('comments')
# url = URLField('url', validators=[DataRequired(), url()])
def validate(self):
if not Form.validate(self):
return False
if not self.signum.data:
self.signum.data = "None"
return True
Comentarios
Publicar un comentario