亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

flask中的wtforms使用方法

2020-02-15 22:16:39
字體:
來源:轉載
供稿:網友

一、簡單介紹flask中的wtforms

WTForms是一個支持多個web框架的form組件,主要用于對用戶請求數據進行驗證。

安裝:

pip3 install wtforms

二、簡單使用wtforms組件

1、用戶登錄

具體代碼:

from flask import Flask,render_template,request,redirectfrom wtforms.fields import corefrom wtforms.fields import html5from wtforms.fields import simplefrom wtforms import Formfrom wtforms import validatorsfrom wtforms import widgetsapp = Flask(__name__,template_folder="templates")class Myvalidators(object):  '''自定義驗證規則'''  def __init__(self,message):    self.message = message  def __call__(self, form, field):    print(field.data,"用戶輸入的信息")    if field.data == "haiyan":      return None    raise validators.ValidationError(self.message)class LoginForm(Form):  '''Form'''  name = simple.StringField(    label="用戶名",    widget=widgets.TextInput(),    validators=[      Myvalidators(message="用戶名必須是haiyan"),#也可以自定義正則      validators.DataRequired(message="用戶名不能為空"),      validators.Length(max=8,min=3,message="用戶名長度必須大于%(max)d且小于%(min)d")    ],    render_kw={"class":"form-control"} #設置屬性  )  pwd = simple.PasswordField(    label="密碼",    validators=[      validators.DataRequired(message="密碼不能為空"),      validators.Length(max=8,min=3,message="密碼長度必須大于%(max)d且小于%(min)d"),      validators.Regexp(regex="/d+",message="密碼必須是數字"),    ],    widget=widgets.PasswordInput(),    render_kw={"class":"form-control"}  )@app.route('/login',methods=["GET","POST"])def login():  if request.method =="GET":    form = LoginForm()    return render_template("login.html",form=form)  else:    form = LoginForm(formdata=request.form)    if form.validate():      print("用戶提交的數據用過格式驗證,值為:%s"%form.data)      return "登錄成功"    else:      print(form.errors,"錯誤信息")    return render_template("login.html",form=form)if __name__ == '__main__':  # app.__call__()  app.run(debug=True)

login.html

<body><form action="" method="post" novalidate>  <p>{{ form.name.label }} {{ form.name }} {{ form.name.errors.0 }}</p>  <p>{{ form.pwd.label }} {{ form.pwd }} {{ form.pwd.errors.0 }}</p>  <input type="submit" value="提交">  <!--用戶名:<input type="text">-->  <!--密碼:<input type="password">-->  <!--<input type="submit" value="提交">--></form></body>

2、用戶注冊

from flask import Flask,render_template,redirect,requestfrom wtforms import Formfrom wtforms.fields import corefrom wtforms.fields import html5from wtforms.fields import simplefrom wtforms import validatorsfrom wtforms import widgetsapp = Flask(__name__,template_folder="templates")app.debug = True=======================simple===========================class RegisterForm(Form):  name = simple.StringField(    label="用戶名",    validators=[      validators.DataRequired()    ],    widget=widgets.TextInput(),    render_kw={"class":"form-control"},    default="haiyan"  )  pwd = simple.PasswordField(    label="密碼",    validators=[      validators.DataRequired(message="密碼不能為空")    ]  )  pwd_confim = simple.PasswordField(    label="重復密碼",    validators=[      validators.DataRequired(message='重復密碼不能為空.'),      validators.EqualTo('pwd',message="兩次密碼不一致")    ],    widget=widgets.PasswordInput(),    render_kw={'class': 'form-control'}  )  ========================html5============================  email = html5.EmailField( #注意這里用的是html5.EmailField    label='郵箱',    validators=[      validators.DataRequired(message='郵箱不能為空.'),      validators.Email(message='郵箱格式錯誤')    ],    widget=widgets.TextInput(input_type='email'),    render_kw={'class': 'form-control'}  )  ===================以下是用core來調用的=======================  gender = core.RadioField(    label="性別",    choices=(      (1,"男"),      (1,"女"),    ),    coerce=int #限制是int類型的  )  city = core.SelectField(    label="城市",    choices=(      ("bj","北京"),      ("sh","上海"),    )  )  hobby = core.SelectMultipleField(    label='愛好',    choices=(      (1, '籃球'),      (2, '足球'),    ),    coerce=int  )  favor = core.SelectMultipleField(    label="喜好",    choices=(      (1, '籃球'),      (2, '足球'),    ),    widget = widgets.ListWidget(prefix_label=False),    option_widget = widgets.CheckboxInput(),    coerce = int,    default = [1, 2]  )  def __init__(self,*args,**kwargs): #這里的self是一個RegisterForm對象    '''重寫__init__方法'''    super(RegisterForm,self).__init__(*args, **kwargs) #繼承父類的init方法    self.favor.choices =((1, '籃球'), (2, '足球'), (3, '羽毛球')) #吧RegisterForm這個類里面的favor重新賦值  def validate_pwd_confim(self,field,):    '''    自定義pwd_config字段規則,例:與pwd字段是否一致    :param field:    :return:    '''    # 最開始初始化時,self.data中已經有所有的值    if field.data != self.data['pwd']:      # raise validators.ValidationError("密碼不一致") # 繼續后續驗證      raise validators.StopValidation("密碼不一致") # 不再繼續后續驗證@app.route('/register',methods=["GET","POST"])def register():  if request.method=="GET":    form = RegisterForm(data={'gender': 1}) #默認是1,    return render_template("register.html",form=form)  else:    form = RegisterForm(formdata=request.form)    if form.validate(): #判斷是否驗證成功      print('用戶提交數據通過格式驗證,提交的值為:', form.data) #所有的正確信息    else:      print(form.errors) #所有的錯誤信息    return render_template('register.html', form=form)if __name__ == '__main__':  app.run()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91av视频在线免费观看| 亚洲免费中文字幕| 日韩av在线免费播放| 亚洲精品av在线播放| 亚洲欧美日韩区| 欧美中文在线免费| 亚洲精品久久在线| 国产成人一区二区三区| 韩国三级电影久久久久久| 国产精品扒开腿做爽爽爽男男| 久久99久久99精品免观看粉嫩| 欧美诱惑福利视频| 亚洲欧美日韩爽爽影院| 神马久久久久久| 久青草国产97香蕉在线视频| 最近2019中文字幕一页二页| 91国内产香蕉| 欧美性videos高清精品| 久久色免费在线视频| 国产女人18毛片水18精品| 日韩福利视频在线观看| 91久久久精品| 国产va免费精品高清在线观看| 91精品国产成人www| 尤物yw午夜国产精品视频| 91久久久国产精品| 久久久国产视频91| 精品视频在线播放免| 久久91亚洲人成电影网站| 国产精品白嫩初高中害羞小美女| 亚洲综合中文字幕在线观看| 亚洲第一区在线观看| 国产日韩欧美91| 一本色道久久88综合亚洲精品ⅰ| 欧美亚洲视频在线观看| 久久在线观看视频| 一色桃子一区二区| 国产激情久久久久| 最近2019好看的中文字幕免费| 亚洲老板91色精品久久| 国产综合色香蕉精品| 国产精品欧美久久久| 欧美另类交人妖| 91在线观看免费高清完整版在线观看| 久久久成人精品| 68精品国产免费久久久久久婷婷| 精品福利在线看| 亚洲成人av片在线观看| 日韩精品视频观看| 国产精品久久久久久久app| 欧美国产日韩视频| 亚洲一区第一页| 日韩欧美国产黄色| 大荫蒂欧美视频另类xxxx| 欧美黑人极品猛少妇色xxxxx| 日本一欧美一欧美一亚洲视频| 国产精品美女免费视频| 欧美一区二区大胆人体摄影专业网站| 日韩在线小视频| 亚洲精品视频网上网址在线观看| 亚洲成人精品在线| 国产精品国模在线| 久久久久久91香蕉国产| 国产在线98福利播放视频| 欧美日本啪啪无遮挡网站| 国产欧美精品一区二区三区-老狼| 国产精品极品美女粉嫩高清在线| 中文字幕欧美精品在线| 欧美成人一二三| 国产成人精品久久二区二区91| 欧美激情a∨在线视频播放| 国产精品久久久av| 国语自产偷拍精品视频偷| 国产欧美日韩91| 曰本色欧美视频在线| 亚洲欧美另类在线观看| 国产精品色婷婷视频| 黑人与娇小精品av专区| 日韩网站在线观看| 精品中文字幕久久久久久| 欧美性xxxx极品hd欧美风情| 亚洲精品自拍偷拍| 欧美激情一区二区三区久久久| 午夜剧场成人观在线视频免费观看| 欧美视频免费在线| 亚洲综合日韩在线| 欧美中文在线字幕| 秋霞成人午夜鲁丝一区二区三区| 国产999在线| 午夜精品福利电影| 欧美一级视频在线观看| 欧美一区第一页| 欧洲美女免费图片一区| 久久久久久网址| 精品久久久久久久久中文字幕| 日韩欧美国产成人| 亚洲男人天堂2023| 麻豆乱码国产一区二区三区| 91牛牛免费视频| 日韩在线观看免费av| 国产精品视频久久久| 久久精品亚洲国产| 欧美一级大片在线观看| 亚洲国产成人精品电影| 亚洲人成毛片在线播放| 欧美限制级电影在线观看| 欧美午夜电影在线| 国产精品亚洲欧美导航| 国产精品盗摄久久久| 国产精品久久久久77777| 日本高清视频一区| 欧美网站在线观看| 清纯唯美亚洲激情| xxx成人少妇69| 亚洲性夜色噜噜噜7777| 97超视频免费观看| 欧美在线视频免费| 亚洲一级一级97网| 国产精品日韩在线观看| 国产成人亚洲精品| 欧美日在线观看| 国产98色在线| 91精品国产自产在线老师啪| 欧美日韩亚洲国产一区| 国产日韩中文字幕在线| 亚洲色图校园春色| 国产69久久精品成人看| 69影院欧美专区视频| 亚洲日本成人女熟在线观看| 97久久超碰福利国产精品…| 日日骚av一区| 色悠久久久久综合先锋影音下载| 中文日韩在线视频| 高清亚洲成在人网站天堂| 中文字幕欧美日韩| 亚洲一区二区三区四区在线播放| 亚洲国产91精品在线观看| 亚洲一区二区三区久久| 日韩精品免费电影| 精品一区二区三区电影| 欧美性猛交视频| 成人午夜在线影院| 亚洲精品短视频| 在线观看精品国产视频| 国产丝袜一区二区三区免费视频| 色婷婷亚洲mv天堂mv在影片| 亚洲男人天堂久| 久热精品视频在线| 欧美国产在线视频| 精品国产电影一区| 亚洲成人精品在线| 国产精品黄页免费高清在线观看| 中文字幕亚洲情99在线| 欧美日韩国产999| 日韩欧美在线观看视频| 亚洲欧美福利视频| 精品久久久久久久久久久久| 国产成人亚洲综合91精品| 亚洲国产精品女人久久久| 成人av色在线观看| 成人黄色片在线| 九九热精品视频国产| 久久久久久com| 亚洲国产高清高潮精品美女|