wtforms第三方库 验证、自定义验证

一、常规验证方法:

from wtforms import StringField, PasswordField, Form,simple,widgets,validators

from wtforms.validators import Length, Email,ValidationError, EqualTo,Regexp,DataRequired,URL,AnyOf,NoneOf,UUID

class LoginForm(Form):

  pwd = PasswordField(  )

  name =StringField(

    label='字段的名字',
    validators=[

    DataRequired(message='用户名不能为空.'),
    Length(min=6, max=18, message='用户名长度必须大于%(min)d且小于%(max)d'),
    Email(message='邮箱格式错误'),

    EqualTo('pwd', message="两次密码输入不一致")

    Regexp(regex="\d+",message="密码必须是数字")

    Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}",
    message='密码至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符')

    Regexp(r'1[3,5,6,7,8]\d{9}',message='手机号码11位,1开头 第二位 3 5 6 7 8开始的.')

    URL(message='输入正确的url地址')

    AnyOf(["1","2","3"],message='确保输入值在可选值列表中')

    NoneOf(["1","2","3"],message='确保输入值不在可选值列表中')

    UUID(message='输入的字符不是UUID(校验字符是否是UUID)')

]

)

参考: https://blog.csdn.net/u011146423/article/details/84564637?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-13.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-13.nonecase

前端

有2种写法  获取某个字段的错误信息还可以 {{form.pwd.errors[0] }}

<input id="pawd" style="width:100%"  name="pwd"   placeholder="密码"> 

<p>{{form.pwd.label}} {{form.pwd}} {{form.pwd.errors[0] }}</p>   可以参考下面和上面的url ,可以在 wtforms 校验类里面写好前端的展示字段的

参考: 

https://www.cnblogs.com/wdliu/p/10183645.html

https://blog.csdn.net/aaronthon/article/details/81714513

二、自定义校验的写法:

class LoginForm(Form):
user_id =StringField(
  label='用户名',
  validators=[
  DataRequired(message='usr_id不能为空.')]
  )

def validate_user_id(self, field):
  # 通过.data 获取到前端传入数据, 与数据库中保存验证码对比。 不相等 通过raise 抛出ValidationError异常
  # 在ValidationError中填写错误提示信息, 错误信息可通过 form.errors 获取到
  if (field.data == 123 ):
    pass
  else:
    raise ValidationError('请输入符合要求的user_id!!')

参考: https://blog.csdn.net/weixin_45927049/article/details/105317510?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-4

整体

前端模版

<div>
{% if form and form.errors %}
{% for key, error in form.errors.items() %}
<div>{{ error }}</div>

{% endfor %}
{% endif %}

#错误信息输出

<div>
<form action="{{ url_for('web.register') }}" method="post">
<input style="width:100%" id="nickname" name="nickname"
type="text"
placeholder="昵称"
value="{{ form.data['nickname'] | default('',true) }}">
<input style="width:100%" id="email" name="email" type="text"
placeholder="邮箱"
value="{{ form.data['email'] | default('',true) }}">
<input id="password" style="width:100%"
name="password"
placeholder="密码"
type="password">
<input style="margin-top:15px;" id="btn-submit" type="submit"
value="注册">
</form>
</div>

后端:

from wtforms import StringField, PasswordField, Form,simple,widgets
from wtforms.validators import Length, Email,ValidationError, EqualTo,Regexp,DataRequired

class LoginForm(Form):
  user_id =StringField(
  label='用户名',
  validators=[
  DataRequired(message='usr_id不能为空.')]
  )

def validate_user_id(self, field):
  # 通过.data 获取到前端传入数据, 与数据库中保存验证码对比。 不相等 通过raise 抛出ValidationError异常
  # 在ValidationError中填写错误提示信息, 错误信息可通过 form.errors 获取到
  if (field.data in ["22343","332"]):
    pass
  else:
    raise ValidationError('请输入符合要求的user_id!!')

@app.route('/lucax', methods=['GET', 'POST'])
def Check():
  form = LoginForm(formdata=request.form)
  if request.method == 'POST':
    if form.validate():
      try:
        print('用户提交数据通过格式验证,提交的值为:',form.data['user_id'],file = sys.stderr)
        main(int(form.data['user_id']))
        flash("执行成功,数据已删除",category='warning')
        return render_template('a.html',form=form)
      except:
        flash("执行异常,请联系管理员排查问题,并记录提交的user_id",category='warning')
        return render_template('a.html',form=form)
    else:
      print(form.errors,file = sys.stderr)
      return render_template('a.html',form=form)
  else:
    return render_template('a.html')

猜你喜欢

转载自www.cnblogs.com/kaibindirver/p/12940752.html
今日推荐