两种将自定义验证信息写入flask_wtf内置验证器的方法

在表单验证用户名和邮箱是否与数据库匹配的时候使用flash()闪存消息虽然很方便,但flash信息与wtf_forms的错误信息二者视觉上无法达到统一,不够完美,因此介绍两种将自定义验证信息写入flask_wtf内置验证器的方法。

方法一、表单验证器中添加规则

示例: 在注册时验证用户名是否存在:只需关注validate_email()方法,validate_*字段名必须跟需要验证的字段名完全一致

from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired, Email
from app.models import User

class registerForm(FlaskForm):
	email = StringField('邮箱',validators=[
       	DataRequired('邮箱不能为空'),
       	Email('请输入正确的邮箱格式')
   	],render_kw={
        'placeholder': '请输入邮箱',
        'class': 'form-control form-control-light',
        'type': 'email'
    })
	
	# 验证邮箱是否已注册
	# 该方法将自动添加验证规则添加到form.email.errors中
	def validate_email(self, email):
		user = User.query.filter_by(email = email.data).first()
        if user:
            raise ValidationError('邮箱已被注册')
            

方法二、路由器中添加规则

若不想使用上面第一种方法,那么我们还可以在路由器或者其它地方设置验证规则。
还是注册用户为例:只需关注process_errors,它的作用是将自定义验证规则信息预存到验证错误列表

from app.forms import registerForm
from app.models import User

@app.route('/register',methods = ['GET','POST'])
def register():
	form = registerForm()
	
	user = User.query.filter_by(email = form.email.data).first()
	if user:
		# 将验证信息预存到验证错误列表form.email.errors中
		form.email.process_errors.append('邮箱已被注册')
		
	if form.validate_on_submit():
		# 通过验证后的业务代码...
	

剩下的就是在jinjia2的html模板中调用表单验证错误信息

{% if form.email.errors %}
    {{ form.email.errors[0] }}
    <!-- 或者 -->
    <!-- {% for error in form.email.errors %}
    {{ error }}
	{% endfor %} -->
{% endif %}

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值