1. 使用Flask-WTF处理表单
1.1 定义WTForms表单类
一个表单由若干个输入字段组成,这些字段分别用类表单的类属性来表示(字段即Field,可以简单理解为表单内的输入框、按钮等部件)。
from wtforms import Form,StringField,PasswordField,BooleanField,SubmitField
from wtforms.validators import DataRequired,Length
class LoginForm(Form):
username = StringField('Username',validators=[DataRequired(message=u'用户名不能为空')])
password = PasswordField('Password',validators=[DataRequired(),Length(8,28)])
remember = BooleanField('Remember me')
submit = SubmitField('Log in')
validators参数接收一个传入可调用对象组成的列表。内置的验证器通过实现了__call()__方法的类表示,所以需要在验证器后面添加括号。
上面例子中,在name和passowrd字段里,都使用了DataRequired验证器,其中username字段中的DataRequired验证器设置了message参数,这个参数通过传入自定义错误信息(u’用户名不能为空’)来覆盖内置消息。
1.2 输出HTML代码
> > > form = LoginForm()
> > > form.username()
u' < input id =" username" name =" username" type =" text" value ="" >'
> > > form.submit()
u' < input id =" submit" name =" submit" type =" submit" value =" Submit" >'
字段的
> > > form.username.label()
u' < label for =" username" > Username </ label >'
> > > form.submit.label()
u' < label for =" submit" > Submit </ label >'
在创建HTML表单时,经常会需要使HTML元素的其他属性来对字段进行设置。比如,添加class属性设置对应的CSS类为字段 添加样式;添加placeholder属性设置占位文本。默认情况下,WTForms输出的字段HTML代码只会包含id和name属性,属性值均为表单类中对应的字段属性名称。如果要添加额外的属性,通常有两种方法。