使用Flask wtforms验证器而不使用表单

布罗瑟夫

我正在从iOS应用程序接收用户注册数据,我想使用wtforms附带的验证器来确保电子邮件和密码可以接受。但是,由于用户是从iOS文本字段输入数据的,所以我不使用烧瓶形式。是否可以使用wtforms验证器检查传入的JSON数据?

@auth.route('/register', methods=['POST'])
def register():
    try:
        user = User.register_fromJSON(request.json)

        email_success = validate_email(user)
        username_success = validate_username(user)

        if email_success == 1 and username_success == 1:
            db.session.add(user)
            db.session.commit()
            return jsonify({'Success': 1})
        else:
            return jsonify({'Failure': 0})

    except Exception:
        return jsonify({'Failure': 0})

def validate_email(user):
    if User.query.filter_by(email=user.email).first() == None:
        return 1
    else:
        return 0

def validate_username(user):
    if User.query.filter_by(username=user.username).first() == None:
        return 1
    else:
        return 0

编辑

我创建了一个注册表:

class RegistrationForm(Form):
    email = StringField('Email', validators=[Required(), Length(1,64), Email()])
    username = StringField('Username', validators=[Required(), Length(1, 64), Regexp('^[A-Za-z][A-Za-z0-9_.]*$', 0, 'Usernames must have only letters, 'numbers, dots or underscores')])
    password = PasswordField('Password', validators=[Required()])


    def validate_email(self, field):
        if User.query.filter_by(email=field.data).first():
            print("Email already registered.")
            raise ValidationError('Email already registered.')

    def validate_username(self, field):
        if User.query.filter_by(username=field.data).first():
            print("Username already in use.")
            raise ValidationError('Username already in use.')

注册功能已更新为:

@auth.route('/register', methods=['POST'])
def register():
    try:
        data = MultiDict(mapping=request.json)
        form = RegistrationForm(data)

        if form.validate():
            user = User.register_fromJSON(request.json)
            db.session.add(user)
            db.session.commit()
            return jsonify({'Success': 1})
        else:
            return jsonify({'Success': 2})

    except Exception:
        return jsonify({'Success': 3})
肖恩·维埃拉(Sean Vieira)

是的,这完全有可能-wtforms.Form构造函数采用任何MultiDict类似的接口(它只需要具有getlist),因此您可以werkzeug.datastructures.MultiDict从JSON创建一个实例

data = MultiDict(mapping=request.json)
form = YourForm(data)
if form.validate():
    # Data is correct

(假设字段名称匹配),事情就可以了

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Flask的WTForms中的自定义验证器

使用Flask / WTForms的多部分表单

在 Flask 中使用 WTForms 验证 GET 参数

使用验证器验证表单

使用Flask和WTForms链接表单的问题

使用WTForms和Flask预先填充编辑表单

使用Flask-WTForms,如何设置html的表单部分的样式?

验证使用AJAX填充的FlaskForm(Flask-WTForms)SelectField

jquery 不使用 jquery 验证插件验证表单

Flask WTForms-基于多个表单字段的自定义验证器

如何在不使用表单taglib的情况下在JSP中访问Spring 3 MVC验证器结果

如何禁用Bootstrap表单验证(不使用jQuery)?

如何不使用Flask-Security验证散列?

如何使用Flask WTForms创建多选选项

使用Flask-WTF / WTForms在Flask中添加取消按钮

使用休眠验证器进行Spring MVC表单验证

如何使用Flask-WTForms以DRY方式创建重复的表单元素?

如何在使用Flask和WTForms保留表单数据的同时进行重定向?

Flask-WTForms使用jQuery移至下一个表单字段

有没有办法在使用Flask和Flask-WTForms循环浏览表单时隐藏csrf标签?

Spring:不使用Hibernate的唯一ID验证器

spring 验证器不使用属性文件显示错误消息

测试Flask WTForms验证器而无需重复代码

在 Flask 中动态添加或删除 WTForms 验证器

Flask缓存会记住不使用Flask的静态资源

Flask-无法在SubForms中使用验证器

使用单个方法渲染 WTForms 表单?

WTForms Regexp验证器:如何使用正则表达式匹配html标记内的空白

客户端部分生成表单时如何进行Flask WTForms表单验证