Web表单使用
@(Flask)
request对象包含客户端发出的所有请求信息。
request.form能获取POST请求中提交的表单数据。
使用的包
Flask-WTF可以把处理Web表单的过程变成愉快的体验。
pip install flask-wtf
CSRF:跨站请求伪造保护
实现CSRF保护的方法:设置秘钥。
简单的做法是写到代码中,但是这种做法不够安全最好是保存在环境变量中,这类技术后序会继续再谈。
#hello.py
app = Flask(__name__)
app.config['SECRET_KEY'] = 'hard to guess string'
注意到,这里用到了app.config
字典,Python中,几乎可以见名之意,这里也不例外。
app.config的作用:存储框架、扩展、程序本身的配置变量。
写入配置值的方法:
- 标准字典句法
- 从文件或环境导入配置值
值得注意的是,SECRET_KEY
配置变量是通用秘钥。
这个通用,指的是可在Flask和多个第三方扩展中使用。
表单类
每个Web表单都由一个继承自Form的类表示。
这个类定义了表单中的一组字段,每个字段都用对象表示。
字段对象可以附属一个或多个验证函数。
验证函数的作用:验证用户提交的输入值是否符合要求。
#简单的Web表单,包含一个文本字段和一个提交按钮
from flask_wtf import Form
from wtforms import StringField,SubmitField
from wtforms.validators import Required
class NameForm(Form):
name = StringField('What is your name?', validators=[Required()])
submit = SubmitField('Submit')
理解:表单中的字段都定义为类变量。
其中类变量的值是相应字段类型的对象。
这里的name字段,对应的是StringField的对象;
submit按钮是SubmitField的对象。
StringField类表示的是属性为type="text"
的<input>
元素。
SubmitField类表示的是是属性为type="submit"
的<input>
元素。
同时值得关注的是在StringField
构造函数中有一个可选参数:validators
,而且是以数组形式,正对应了前面说的一个字段可以有一个或者多个验证函数。
WTForms支持的HTML标准字段
- StringField 文本字段
- TextAreaField 多行文本字段
- PasswordField 密码文本字段
- HiddenField 隐藏文本字段
- DateField 值为datetime.date格式的文本字段
- DateTimeField 值为datetime.datetime格式的文本字段
- IntegerField 值为整数的文本字段
- DecimalField 值为decimal.Decimal的文本字段