1.防止跨站请求伪造保护
app = Flask(__name__)
app.config['SECRET_KEY'] = 'hard to guess string'
app.config用来存储整个应用的配置变量,它是一个字典
2.创建表单类
每个web表单都由继承自Form的类表示,每个字段用对象表示。
from flask.ext.wtf import Form
from wtforms import StringField, SubmitField
from wtforms.validators import Required
class NameForm(Form): # 新建了一个NameForm的表单
name = StringField('What is your name?', validators=[Required()])# 表单的第一个字段,validators是验证函数的参数
submit = SubmitField('Submit') # 表单的第二个字段
3.在视函数中处理表单
@app.route('/', methods=['GET', 'POST']) #把这个函数处理成请求处理程序,默认为get
def index():
name = None
form = NameForm()
if form.validate_on_submit():# 如果被require()验证,则返回True.为True则处理表单处理的数据,为False则重新渲染表单
name = form.name.data # 获得用户所输入的数据
form.name.data = ''#重新将表单中的数据清空
return render_template('index.html', form=form, name=name)
4.渲染表单类
手动渲染
<form method="POST">
{{ form.hidden_tag() }}
{{ form.name.label }} {{ form.name(id='my-text-field') }}
{{ form.submit() }}
</form>
bootstrap渲染
{ % import "bootstrap/wtf.html" as wtf % }
{ % block page_content % }
{{ wtf.quick_form(form) }}
<div class="page-header">
<h1>Hello, { % if name % }{{ name }}{ % else % }Stranger{ % endif % }!</h1>
</div>
{ % endblock % }