wtforms

使用:

from wtforms import Form
from wtforms.fields import simple,core,html5 # 字段来自于这里
from wtforms import validators # 验证规则来自于这里
from wtforms import widgets # 工具是在这里
 
class LoginForm(Form):
    user = simple.StringField(
            label='用户名', # 提示信息
            validators=[validators.DataRequired(message='用户名不能为空.')], #验证规则的列表
            widget=widgets.TextInput(), # 优先按他定义的方式渲染input标签
            render_kw={'class': 'form-control'} # 为input标签设置属性添加类等!

渲染:

实例自定义的类对象,传入模板中,如果实例对象时传入了数据,该数据会被渲染到input框里
{{ form.name }} # 该字段的input框
{{ form.name.label }} # 该字段提示信息
{{ form.name.errors[0] }} # 该字段的错误信息,建议用这种方式,下面那种获取字段的错误信息会抛出异常
{{ form.errors }} # 全部的错误信息
# 也可以使用for循环的方式,并且他的顺序不会错乱,因为Form内部维持了一个计数器
{% for item in form %}
        <p>{{item.label}}: {{item}} {{item.errors[0] }}</p>
{% endfor %}

验证:

验证
实例自定义类对象是传递数据
form = LoginForm(formdata=request.form)
if form.validate():
    # 验证通过,打印数据
    print(form.data)
else:
    print(form.error) # 打印错误信息
实例化时可传递的几种数据
formdata : request.data这种有get和get_list的
data : 一个字典
obj : obj.字段名获得数据的,比如模型类对象

from wtforms import Form, validators, widgets
from wtforms.fields import simple, core
class RegForm(Form):
    username = simple.StringField(    
        label="用户名",
        validators=[
            validators.DataRequired(message="用户名不能为空"),   #校验器返回错误信息在files.errors中
            validators.Length(min=4, max=8, message="用户名必须大于4小于8")
        ],
        render_kw={"class":"my_class"}    #定义标签的属性
    )
     hobby = core.SelectMultipleField(
        label="癖好",
        choices=(
            (1, "萝莉"),
            (2, "御姐"),
            (3, "小哥哥"),
            (4, "正太")
        ),
        # widget=widgets.,
        widget=widgets.ListWidget(prefix_label=False),
        option_widget=widgets.CheckboxInput(),          #小部件wdget渲染前端页面
        coerce=int,
        default=(1, 4)
    )
    
字段类型:
    imple是简单常用的包括:
['BooleanField', 'TextAreaField', 'PasswordField', 'FileField',
   'HiddenField', 'SubmitField', 'TextField']
core是不太常用的
(    'BooleanField', 'DecimalField', 'DateField', 'DateTimeField', 'FieldList',
    'FloatField', 'FormField', 'IntegerField', 'RadioField', 'SelectField',
    'SelectMultipleField', 'StringField',
)
html5中的标签自带正则(浏览器校验)
(    'DateField', 'DateTimeField', 'DateTimeLocalField', 'DecimalField',
    'DecimalRangeField', 'EmailField', 'IntegerField', 'IntegerRangeField',
    'SearchField', 'TelField', 'URLField',
   
常用的校验规则
    DataRequired:非空验证,message=错误信息

    Email:邮箱格式验证,message=错误信息

    Length: 长度验证,min=最短,max=最长,message=错误信息

    Regexp: 正则匹配,regex正则表达式,message=错误信息

    EqualTo:与其他字段的值比较是否相同,fieldname=其他字段名,message=错误信息
 
自定义验证-钩子
# 为一个字段设置验证
def validate_字段名(self, field):
    print(field.data) # 当前字段传过来的值
    print(self.data) # 当前传过来的所有的值:name,gender......
    if 验证失败:
        raise validators.ValidationError("继续后续验证")
        # raise validators.StopValidation("不再继续后续验证")
 小部件:
 wtforms.widgets提供了许多的表单样式,每个字段都有默认的widget,通过设置widget可以修改渲染出来的样式
('CheckboxInput', 'FileInput', 'HiddenInput', 'ListWidget', 'PasswordInput',
   'RadioInput', 'Select', 'SubmitInput', 'TableWidget', 'TextArea',
   'TextInput', 'Option')
原文地址:https://www.cnblogs.com/litieshuai/p/10446102.html