Flask学习 三 web表单
web表单
pip install flask-wtf
实现csrf保护
app.config['SECRET_KEY']='hard to guess string' # 可以用来存储框架,扩展,程序等的配置变量
#支持的字段 StringField 文本字段 TextAreaField 多行文本字段 PasswordField 密码文本字段 HiddenField 隐藏文本字段 DateField 文本字段,值为datetime.date格式 DateTimeField 文本字段,值为datetime.datetime格式 IntegerField 文本字段,值为整数 DecimalField 文本字段,值为decimal.Decimal FloatField 文本字段,值为浮点数 BooleanField 复选框 RadioField 一组单选框 SelectField 下拉列表 SelectMultipleField 下拉列表,可选择多个值 FileField 文本上传字段 SubmitField 表单提交 FormField 把表单作为字段嵌入另一个表单 FieldList 一组指定类型的字段
#验证函数 Email 验证电子邮件地址 EqualTo 比较两字段值,常用于要求输入两次密码确认 IPAddress 验证IPv4网络地址 Length 验证输入字符串长度 NumberRange 验证输入的值在数字范围内 Optional 无输入值时跳过其他验证函数 Required 确保字段中的数据 Regexp 使用正则表达式验证输入值 URL 验证URL AnyOf 确保输入值在可选值列表中 NoneOf 确保输入值不在可选值列表中
# app.py
from flask_wtf import FlaskForm from wtforms import StringField,SubmitField from wtforms.validators import DataRequired app.config['SECRET_KEY']='hard to guess string' # 可以用来存储框架,扩展,程序等的配置变量 class NameForm(FlaskForm): name = StringField('姓名',validators=[DataRequired()]) submit = SubmitField('提交') @app.route ('/',methods=['get','post']) def index1(): name=None form=NameForm() if form.validate_on_submit(): name=form.name.data form.name.data='' return render_template('index.html',name=name,form=form,current_time = datetime.utcnow())
# if
<h1>Hello,{% if name %}{{ name }}{% else %}Stranger{% endif %}!</h1>
# 利用bootstrap form渲染表单 {{ wtf.quick_form(form) }}
重定向,会话,flash消息
from flask import Flask, render_template,session,redirect,url_for,flash from flask_bootstrap import Bootstrap from flask_wtf import FlaskForm from wtforms import StringField, SubmitField from wtforms.validators import DataRequired app = Flask(__name__) app.config['SECRET_KEY'] = 'hard to guess string' # 可以用来存储框架,扩展,程序等的配置变量 class NameForm(FlaskForm): name = StringField('姓名', validators=[DataRequired()]) submit = SubmitField('提交') bootstrap = Bootstrap(app) moment = Moment(app) @app.route('/', methods=['get', 'post']) def index1(): name = None form = NameForm() if form.validate_on_submit(): old_name = session.get('name') if old_name is not None and old_name != form.name.data: flash('看来你改变了名字') session['name']=form.name.data return redirect(url_for('index1')) return render_template('index.html', name=session.get('name'), form=form, current_time=datetime.utcnow()) if __name__ == '__main__': app.run(debug=True)
{% for message in get_flashed_messages() %} <div class="alert alert-warning"> <button type="button" class="close" data-dismiss="alert">×</button> {{ message }} </div> {% endfor %}
{{ wtf.quick_form(form) }}