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.DecimalFloatField 文本字段,值为浮点数BooleanField 复选框RadioField 一组单选框SelectField 下拉列表SelectMultipleField 下拉列表,可选择多个值FileField 文本上传字段SubmitField 表单提交FormField 把表单作为字段嵌入另一个表单FieldList 一组指定类型的字段
#验证函数Email 验证电子邮件地址EqualTo 比较两字段值,常用于要求输入两次密码确认IPAddress 验证IPv4网络地址Length 验证输入字符串长度NumberRange 验证输入的值在数字范围内Optional 无输入值时跳过其他验证函数Required 确保字段中的数据Regexp 使用正则表达式验证输入值URL 验证URLAnyOf 确保输入值在可选值列表中NoneOf 确保输入值不在可选值列表中
# app.py from flask_wtf import FlaskFormfrom wtforms import StringField,SubmitFieldfrom wtforms.validators import DataRequiredapp.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())
# ifHello,{% if name %}{ { name }}{% else %}Stranger{% endif %}!
# 利用bootstrap form渲染表单{ { wtf.quick_form(form) }}
重定向,会话,flash消息
from flask import Flask, render_template,session,redirect,url_for,flashfrom flask_bootstrap import Bootstrapfrom flask_wtf import FlaskFormfrom wtforms import StringField, SubmitFieldfrom wtforms.validators import DataRequiredapp = 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() %}{ { message }}{% endfor %}
{ { wtf.quick_form(form) }}