国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > 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()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳朔县| 冕宁县| 乐清市| 北辰区| 平远县| 三台县| 衡东县| 永福县| 察哈| 旌德县| 临夏市| 抚顺市| 平乐县| 泸西县| 西青区| 依安县| 西丰县| 桦甸市| 泉州市| 浦江县| 正定县| 玉龙| 乌拉特中旗| 织金县| 新安县| 邮箱| 泸溪县| 榆树市| 开封市| 宕昌县| 昌都县| 阿拉善盟| 贵德县| 雅江县| 黄陵县| 呼伦贝尔市| 嘉定区| 富宁县| 阿拉善盟| 大悟县| 元朗区|