Micra520 2022-03-25 12:35 采纳率: 60%
浏览 39
已结题

python wtforms.validators 的validate验证 为什么要两个参数呢

最近在学flask框架 写到注册登录这里 有一个疑问是 在做验证码和邮箱是否存在吻合的验证时重写了validate函数
          但是不理解网上的用法,为什么会传self,field两个参数
class RegisterForm(wtforms.Form):
    # 做字数的基础判断验证
    username = wtforms.StringField(validators=[length(min=3, max=20)])
    email = wtforms.StringField(validators=[email()])
    captcha = wtforms.StringField(validators=[length(min=4, max=4)])
    # 密码一定要设置为两百以上 因为后面会使用加密 字符串会很长 所以最少设置为200
    password = wtforms.StringField(validators=[length(min=6, max=20)])
    password_confirm = wtforms.StringField(validators=[EqualTo("password")])


    # 判断验证码是否和数据库的一致
    def validate_captcha(self,field):
        captcha = field.data
        email = self.email.data
        captcha_model = EmailCaptchaModel.query.filter_by(email=email).first()
        # 如果captcha_model 不存在 或者数据库captch字段不等于表单captcha字段
        if not captcha_model or captcha_model.captcha.lower() != captcha.lower():
            # 异常返回
            raise wtforms.ValidationError("邮箱验证码错误")

    # 判断email是否存在
    def validate_email(self,field):
        email = field.data
        user_model = UserModel.query.filter_by(email=email).first()
        if user_model:
            raise wtforms.ValidationError("邮箱已经存在!")


是能正常运行的,此处就没有截图了 但是我在想为什么不能全部用self.email.data这样的方式写呢 field的意义是什么呢
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 4月2日
    • 创建了问题 3月25日

    悬赏问题

    • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
    • ¥100 单片机hardfaulr
    • ¥20 手机截图相片分辨率降低一半
    • ¥50 求一段sql语句,遇到小难题了,可以50米解决
    • ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
    • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
    • ¥15 虚拟机检测,可以是封装好的DLL,可付费
    • ¥15 kafka无法正常启动(只启动了一瞬间会然后挂了)
    • ¥15 Workbench中材料库无法更新,如何解决?
    • ¥20 如何推断此服务器配置