web表單html
pip install flask-wtfweb
實現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消息flask
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) }}