Flask_WTForms源碼流程(糙版)

from flask import Flask, render_template, request, redirect# Form#    _fields#    validate#    validata_name#    validata_pwdfrom wtforms import Form# 字段(經過正則進行校驗;插件生成HTML標籤)#   - 插件對象#   - post_validate#   - __call__#   - __str__from wtforms.fields import corefrom wtforms.fields import html5from wtforms.fields import simple# 插件#    __call__返回:<input />from wtforms import widgetsfrom wtforms import validatorsapp = Flask(__name__, template_folder='templates')app.debug = True"""LoginForm._unbound_fields = NoneLoginForm._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-z\d$@$!%*?&]{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()
相關文章
相關標籤/搜索