昨晚到今天早晨,我花了快3小时看这个东西。
妈妈的,转晕了。
草草草。
总结下吧:
Flask WTF
Quickstart
1.创建基本表单
from flask_wtf import Form
from wtforms import TextField
from wtforms.validators import DataRequired
class MyForm(Form):
name = TextField('name', validators=[DataRequired()])
2.对应的template
<form method="POST" action="/">
{{ form.csrf_token }}
{{ form.name.label }} {{ form.name(size=20) }}
<input type="submit" value="Go">
</form>
其中{{ form.csrf_token }}最好改为{{ form.hidden_tag() }}。
3.验证表单
@app.route('/submit', methods=('GET', 'POST'))
def submit():
form = MyForm()
if form.validate_on_submit():
return redirect('/success')
return render_template('submit.html', form=form)
其中validate_on_submit将会验证是否为POST请求以及验证所有有效性
Creating Forms
1.表单安全
csrf的开关和secret_key,暂时略。用时再加在这
2.文件上传
等私人博客增加上传图片功能时,再看。SAE Storage
3.HTML5 Widgets
用时再看
4.验证码
暂时略
5.API
暂时略
WTFORMS
1.略
2.Fields
2.1基本字段
BooleanField(default field arguments, false_values=None) 代表checkbox
DateField,略
DecimalField
FielField
IntegerField
RadioField
PasswordField
TextAreaField
3.Validators
ValidationError(message=u'',*args,**kwargs) 引发当一个验证器验证输入出错时
内建validators:
DataRequired(message=None)
InputRequired 这两个的区别?
Email(message=None) 验证email地址,应该是内置正则吧
EqualTo(fieldname,message=None) 比较两个字段的值
Length(min=-1,max=+1,message=None) 可以格式化,没细看%d%d
NumberRange(min=None,max=None,messaga=None) 任何数%s%s
Optional 没看
定制validators:
class MyForm(Form):
name = StringField('Name', [InputRequired()])
def validate_name(form, field):
if len(field.data) > 50:
raise ValidationError('Name must be less than 50 characters')
上面是内联验证器,下面展示复用版本的:
def my_length_check(form, field):
if len(field.data) > 50:
raise ValidationError('Field must be less than 50 characters')
class MyForm(Form):
name = StringField('Name', [InputRequired(), my_length_check])
更强大的:
class Length(object):
def __init__(self, min=-1, max=-1, message=None):
self.min = min
self.max = max
if not message:
message = u'Field must be between %i and %i characters long.' % (min, max)
self.message = message
def __call__(self, form, field):
l = field.data and len(field.data) or 0
if l < self.min or self.max != -1 and l > self.max:
raise ValidationError(self.message)
length = Length
4.Widgets
暂时略