首页 > 其他 > 详细

flask 源码专题(四):wtforms Form实例化流程

时间:2020-04-05 14:05:04      阅读:88      评论:0      收藏:0      [点我收藏+]
class LoginForm(Form):
    #首先执行后得到的结果是UnboundField()对象
    name=simple.StringField(
        label=用户名,
        validators=[
            validators.DataRequired(message=用户名不能为空),
        ],
        widget=widgets.TextInput(),
        render_kw={class: form-control}
    )

    pwd=simple.StringField(
        label=密码,
        validators=[
            validators.DataRequired(message=密码不能为空),
        ],
        widget=widgets.TextInput(),
        render_kw={class: form-control}
    )


@user.route(/login,methods=[GET,POST])
def login():
    if request.method==GET:
        form=LoginForm()
        print(form)
        return render_template(login.html,form=form)
    else:
        form=LoginForm(request.form)
        if form.validate():

1.执行Field中的__new__方法

我们还没执行到form=LoginForm()时,LoginForm里面所有的字段都已经执行加载完了,里面的字段的值都是Field实例化而来,

查看上述 LoginForm 中的 name 字段,可以看到它的值是通过 StringField 类实例化返回的对象。查看 StringField 类,会发现它的整个继承体系中都没有指定 metaclass ,所以实例化时真正返回的对象是由它的 __new__ ,它的 __new__ 方法继承自 wtforms.fields.core.Field :

flask 源码专题(四):wtforms Form实例化流程

原文:https://www.cnblogs.com/qiu-hua/p/12636407.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!