zoukankan      html  css  js  c++  java
  • 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')
  • 相关阅读:
    迷宫
    小猫
    数位DP模板
    摘桃子
    [USACO10HOL]牛的政治Cow Politics
    ArcEngine中合并断开的线要素(根据几何判断)
    ArcEngine环境下合并断开的线要素(根据属性)
    Web Service和WCF的到底有什么区别
    OGC 的 WMS、WFS 及WCS服务(转)
    ArrayList的使用方法详解(转)
  • 原文地址:https://www.cnblogs.com/litieshuai/p/10446102.html
Copyright © 2011-2022 走看看