• Flask_WTForms源码流程(糙版)


    from flask import Flask, render_template, request, redirect

    # Form
    # _fields
    # validate
    # validata_name
    # validata_pwd
    from wtforms import Form

    # 字段(通过正则进行校验;插件生成HTML标签)
    # - 插件对象
    # - post_validate
    # - __call__
    # - __str__
    from wtforms.fields import core
    from wtforms.fields import html5
    from wtforms.fields import simple

    # 插件
    # __call__返回:<input />
    from wtforms import widgets

    from wtforms import validators


    app = Flask(__name__, template_folder='templates')
    app.debug = True

    """
    LoginForm._unbound_fields = None
    LoginForm._wtforms_meta = None
    """
    class LoginForm(Form):
    # name = UnboundField(StringField, *args, **kwargs) creation_counter=1
    name = simple.StringField(
    label='用户名',
    validators=[
    validators.DataRequired(message='用户名不能为空.'),
    validators.Length(min=6, max=18, message='用户名长度必须大于%(min)d且小于%(max)d')
    ],
    widget=widgets.TextInput(),
    render_kw={'class': 'form-control'}
    )
    # pwd = UnboundField(PasswordField, *args, **kwargs) creation_counter=2
    pwd = simple.PasswordField(
    label='密码',
    validators=[
    validators.DataRequired(message='密码不能为空.'),
    validators.Length(min=8, message='用户名长度必须大于%(min)d'),
    validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[$@$!%*?&])[A-Za-zd$@$!%*?&]{8,}",
    message='密码至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符')
    ],
    widget=widgets.PasswordInput(),
    render_kw={'class': 'form-control'}
    )

    class Meta:
    csrf = False

    def validate_pwd(self,*args,**kwargs):
    pass
    # 解释到这里...




    @app.route('/login', methods=['GET', 'POST'])
    def login():
    if request.method == 'GET':
    # type.__call__
    # LoginForm._unbound_fields 已经有值(所有字段) [(name,_unbound_fields()),(name,_unbound_fields()),]
    # LoginForm._wtforms_meta = 类(Meta)(所有的Meta)
    # LoginForm._wtforms_meta = type('Meta', tuple(bases), {})

    # LoginForm.__new__
    # LoginForm.__init__
    # 示例化Meta: meta_obj{name = 'alex','xx':'xxx'}
    # self._fields = {
    # name = StringField()
    # pwd = PasswordField()
    # }
    # self.name = StringField()
    # self.pwd = PasswordField()
    # class User:
    # def __init__(self,name):
    # self.name = name
    # obj = User('alex')

    # form = LoginForm(data={'name':'alex'})
    # form = LoginForm(obj=obj) #
    # form = LoginForm(formdata=request.args)
    # 页面标签数据初始化:data=字典, obj=对象.字段 formdata=有getlist方法
    form = LoginForm()
    # print(form.name)
    return render_template('login.html', form=form)
    else:
    form = LoginForm(formdata=request.form)
    if form.validate():
    print('用户提交数据通过格式验证,提交的值为:', form.data)
    else:
    print(form.errors)
    return render_template('login.html', form=form)

    def test():
    form = LoginForm()




    if __name__ == '__main__':
    app.run()
  • 相关阅读:
    Cenots6.5 安装 Intel I219-V 网卡驱动
    nginx的安装
    NGINX 简介
    HTTP 并发响应模型
    日志相关的服务器参数详解:
    使用mysqlbinlog提取二进制日志(zz)
    浅谈mysql日志
    mysql DDL&DML 语言
    fastcgi与cgi的区别(zz)
    基于rancher部署Spring-cloud微服务系统
  • 原文地址:https://www.cnblogs.com/Wormhole-f/p/8268903.html
Copyright © 2020-2023  润新知