WTForm自定义内联验证器

用户名

我想要一个用于重复的用户名和电子邮件的内联验证器。但是,它仅在我首先将is定义为一个函数并将其放入验证器列表时才起作用。以下是我的代码

这是烧瓶

from project import app, db
from project.forms import Reg_form
from project.models import User
from flask import render_template, flash, session, redirect, url_for
from flask_login import login_required

@app.route('/register', methods=['GET','POST'])
def register():
    form = Reg_form()
    if form.validate_on_submit():
            new_user = User(email = form.email.data,
                            username = form.username.data,
                            password = form.password.data)
            db.session.add(new_user)
            db.session.commit()
            flash('Thanks for registering, you may login now.')
            return redirect(url_for('home'))
    return render_template('register.html', form = form)

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

这是表格

from flask_wtf import FlaskForm
from wtforms import StringField, IntegerField, SubmitField, PasswordField
from wtforms.validators import data_required, email, equal_to, length, ValidationError
from project.models import User
def check_email(self, email):
        if User.query.filter_by(email=email.data).first():
            raise ValidationError('Email has been registered')

def check_username(self, username):
        if User.query.filter_by(username=username.data).first():
            raise ValidationError('Username has been registered')

class Reg_form(FlaskForm):
    email = StringField('Email', validators=[data_required(), email(), check_email], render_kw={"placeholder": "[email protected]"})
    username = StringField('Username', validators=[data_required(), check_username], render_kw={"placeholder": "Your username"})
    password = PasswordField('Password', validators=[data_required(), equal_to('confirm_pw', message='Password must match with the confirmed password.')], render_kw={"placeholder": "Your password"})
    confirm_pw = PasswordField('Confirm password', validators=[data_required()], render_kw={"placeholder": "Confirm your password"})
    submit = SubmitField('Register.')

这是我想要的但不起作用

from flask_wtf import FlaskForm
from wtforms import StringField, IntegerField, SubmitField, PasswordField
from wtforms.validators import data_required, email, equal_to, length, ValidationError
from project.models import User

class Reg_form(FlaskForm):
    email = StringField('Email', validators=[data_required(), email()], render_kw={"placeholder": "[email protected]"})
    username = StringField('Username', validators=[data_required()], render_kw={"placeholder": "Your username"})
    password = PasswordField('Password', validators=[data_required(), equal_to('confirm_pw', message='Password must match with the confirmed password.')], render_kw={"placeholder": "Your password"})
    confirm_pw = PasswordField('Confirm password', validators=[data_required()], render_kw={"placeholder": "Confirm your password"})
    submit = SubmitField('Register.')
    def check_email(self, email):
            if User.query.filter_by(email=email.data).first():
                raise ValidationError('Email has been registered')

    def check_username(self, username):
            if User.query.filter_by(username=username.data).first():
                raise ValidationError('Username has been registered')

谢谢。

罗根乔希

这是因为自定义验证器必须以开头validate_实际上,我发现很难在文档中找到确切的位置(例如,这里没有明确提及我认为值得提及的地方),但是您可以在实现中看到它

def validate(self):
    """
    Validates the form by calling `validate` on each field, passing any
    extra `Form.validate_<fieldname>` validators to the field validator.
    """
    extra = {}
    for name in self._fields:
        inline = getattr(self.__class__, "validate_%s" % name, None)
        if inline is not None:
            extra[name] = [inline]

    return super(Form, self).validate(extra)

因此,您需要更改check_emailvalidate_emailetc。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

自定义验证器在Laravel 5中

来自分类Dev

自定义验证器未显示错误

来自分类Dev

验证未在自定义验证器中调用

来自分类Dev

JAXB自定义验证器

来自分类Dev

休眠自定义验证器-addPropertyNode()抽象方法异常

来自分类Dev

ActiveModel验证自定义设置器

来自分类Dev

Spring MVC验证器注释+自定义验证

来自分类Dev

如何向自定义的验证库添加自定义验证器

来自分类Dev

如何在FormRequest中添加自定义验证器?

来自分类Dev

GRAILS从自定义验证器运行查询

来自分类Dev

symfony2自定义验证器FatalErrorException

来自分类Dev

使用Minitest测试自定义验证器

来自分类Dev

自定义,基于内容的Alamofire验证器(在Swift中)

来自分类Dev

带有验证助手的自定义验证器

来自分类Dev

为自定义验证器创建测试

来自分类Dev

Angular 2异步自定义验证器

来自分类Dev

带有参数的Angular 2自定义验证器

来自分类Dev

Angular2自定义验证器未调用

来自分类Dev

在自定义验证器中获取实体类

来自分类Dev

Angular 2-自定义验证器语法

来自分类Dev

控制器方法上的自定义验证器

来自分类Dev

角形自定义验证器

来自分类Dev

Spring MVC自定义验证器

来自分类Dev

Java约束验证器-如何从我的自定义验证器调用默认约束验证器?

来自分类Dev

用于自定义指令表单控件的AngularJS自定义表单验证器

来自分类Dev

将自定义对象传递给WTForm

来自分类Dev

Proptypes 自定义验证器与 Flow

来自分类Dev

带参数的自定义验证器

来自分类Dev

自定义日期范围内联选择器