人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

Flask wtforms實(shí)現(xiàn)表單驗(yàn)證使用

發(fā)布日期:2022-02-12 15:43 | 文章來(lái)源:腳本之家

wtforms

安裝:pip3 install wtforms

使用1(簡(jiǎn)單版):

from flask import Flask, render_template, request, redirect
from wtforms import Form
from wtforms.fields import simple
from wtforms import validators
from wtforms import widgets
app = Flask(__name__, template_folder='templates')
app.debug = True

class LoginForm(Form):
 # 字段(內(nèi)部包含正則表達(dá)式)
 name = simple.StringField(
  label='用戶名',
  validators=[
validators.DataRequired(message='用戶名不能為空.'),
validators.Length(min=6, max=18, message='用戶名長(zhǎng)度必須大于%(min)d且小于%(max)d')
  ],
  widget=widgets.TextInput(), # 頁(yè)面上顯示的插件
  render_kw={'class': 'form-control'}
 )
 # 字段(內(nèi)部包含正則表達(dá)式)
 pwd = simple.PasswordField(
  label='密碼',
  validators=[
validators.DataRequired(message='密碼不能為空.'),
validators.Length(min=8, message='用戶名長(zhǎng)度必須大于%(min)d'),
validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}",
  message='密碼至少8個(gè)字符,至少1個(gè)大寫(xiě)字母,1個(gè)小寫(xiě)字母,1個(gè)數(shù)字和1個(gè)特殊字符')
  ],
  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('用戶提交數(shù)據(jù)通過(guò)格式驗(yàn)證,提交的值為:', form.data)
  else:
print(form.errors)
  return render_template('login.html', form=form)
if __name__ == '__main__':
 app.run()

login.html

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
<h1>登錄</h1>
<form method="post">
 <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="提交">
</form>
</body>
</html>

使用2(復(fù)雜版):

from flask import Flask, render_template, request, redirect
from wtforms import Form
from wtforms.fields import core
from wtforms.fields import html5
from wtforms.fields import simple
from wtforms import validators
from wtforms import widgets
app = Flask(__name__, template_folder='templates')
app.debug = True

class RegisterForm(Form):
 name = simple.StringField(
  label='用戶名',
  validators=[
validators.DataRequired()
  ],
  widget=widgets.TextInput(),
  render_kw={'class': 'form-control'},
  default='alex'
 )
 pwd = simple.PasswordField(
  label='密碼',
  validators=[
validators.DataRequired(message='密碼不能為空.')
  ],
  widget=widgets.PasswordInput(),
  render_kw={'class': 'form-control'}
 )
 pwd_confirm = simple.PasswordField(
  label='重復(fù)密碼',
  validators=[
validators.DataRequired(message='重復(fù)密碼不能為空.'),
validators.EqualTo('pwd', message="兩次密碼輸入不一致")  # EqualTo也可以做密碼驗(yàn)證
  ],
  widget=widgets.PasswordInput(),
  render_kw={'class': 'form-control'}
 )
 email = html5.EmailField(
  label='郵箱',
  validators=[
validators.DataRequired(message='郵箱不能為空.'),
validators.Email(message='郵箱格式錯(cuò)誤')
  ],
  widget=widgets.TextInput(input_type='email'),
  render_kw={'class': 'form-control'}
 )
 gender = core.RadioField(
  label='性別',
  choices=(
(1, '男'),
(2, '女'),
  ),
  coerce=int # “1” “2”
  )
 city = core.SelectField(
  label='城市',
  choices=(
('bj', '北京'),
('sh', '上海'),
  )
 )
 hobby = core.SelectMultipleField(
  label='愛(ài)好',
  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):
  super(RegisterForm, self).__init__(*args, **kwargs)
  self.favor.choices = ((1, '籃球'), (2, '足球'), (3, '羽毛球'))
 def validate_pwd_confirm(self, field):
  """
  自定義pwd_confirm字段規(guī)則,例:與pwd字段是否一致
  :param field:
  :return:
  """
  # 最開(kāi)始初始化時(shí),self.data中已經(jīng)有所有的值
  if field.data != self.data['pwd']:
# raise validators.ValidationError("密碼不一致") # 繼續(xù)后續(xù)驗(yàn)證
raise validators.StopValidation("密碼不一致")  # 不再繼續(xù)后續(xù)驗(yàn)證

@app.route('/register', methods=['GET', 'POST'])
def register():
 if request.method == 'GET':
  form = RegisterForm(data={'gender': 2,'hobby':[1,]}) # initial
  return render_template('register.html', form=form)
 else:
  form = RegisterForm(formdata=request.form)
  if form.validate():
print('用戶提交數(shù)據(jù)通過(guò)格式驗(yàn)證,提交的值為:', form.data)
  else:
print(form.errors)
  return render_template('register.html', form=form)

if __name__ == '__main__':
 app.run()

register.html

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
<h1>用戶注冊(cè)</h1>
<form method="post" novalidate style="padding:0  50px">
 {% for field in form %}
 <p>{{field.label}}: {{field}} {{field.errors[0] }}</p>
 {% endfor %}
 <input type="submit" value="提交">
</form>
</body>
</html>

到此這篇關(guān)于Flask wtforms實(shí)現(xiàn)表單驗(yàn)證使用的文章就介紹到這了,更多相關(guān)Flask wtforms表單驗(yàn)證內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

香港快速服務(wù)器

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開(kāi)通

自選配置、實(shí)時(shí)開(kāi)通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問(wèn)服務(wù)

1對(duì)1客戶咨詢顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部