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

2024-04-10

我正在从 iOS 应用程序接收用户注册数据,我想使用 wtforms 附带的验证器来确保电子邮件和密码可接受。但是,我没有使用 Flask 表单,因为用户是从 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

EDIT

我创建了一个注册表:

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})

是的,这是完全可能的——wtforms.Form构造函数接受任何MultiDict像接口(它只需要有getlist https://github.com/wtforms/wtforms/blob/30245bc92b80e000e9aefa851886d0b0a7aae895/wtforms/meta.py#L29-L45),所以你可以创建一个实例werkzeug.datastructures.MultiDict http://werkzeug.pocoo.org/docs/0.10/datastructures/#werkzeug.datastructures.MultiDict来自您的 JSON:

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

(假设字段名称匹配)并且事情会只是工作.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Flask wtforms 验证器而不使用表单 的相关文章

随机推荐

  • YOLO 目标检测:算法如何预测大于网格单元的边界框?

    我试图更好地理解 YOLO2 和 3 算法的工作原理 该算法处理一系列卷积 直到达到13x13网格 然后它能够 对每个网格单元内的对象以及这些对象的边界框进行分类 如果您查看这张图片 您会发现红色边框比任何单个网格单元都大 边界框也以对象的
  • Python 3 和 NLTK 与 WordNet 2.1 - 这可能吗?

    我将 Python 3 和 NLTK 3 0 0 与 WordNet 3 0 结合使用 我想用该数据 semval2007 https github com alvations pywsd tree master pywsd data se
  • 为什么在这段代码中,await 不会阻塞 flutter 中的 ui

    在默认示例应用程序中 每当您创建新的 flutter 项目时 我都添加了以下代码 initState super initState loop loop async while true await Future delayed Durat
  • C# 中的数组列表

    我们可以将 ArrayList 作为参数传递给 C 中的方法吗 绝对地 然而 你很少应该这样做 这些天你应该差不多always使用泛型类型 例如List
  • 动态 SQL 查询根据单元格中的空值忽略空值

    我有一个动态 SQL 查询 在运行时具有不同的列名和表 我希望让 SQL 查询根据行是否在任何单元格中包含 Null 值来忽略读取数据 SELECT rsv intension rsvt FROM resolve table kb wher
  • 使用复杂风味树更改 google-services.json 的搜索位置

    我知道已经有人问过这个问题 但是对于 4 2 0 以上的 com google gms google services 的任何版本 问题仍然存在 我的 google services json 文件的搜索位置不再考虑风味树状结构 它只写着
  • 使用 Angular JS 时如何加载 AMD 模块?

    由于某种奇怪的原因Angular JS 有自己的模块系统 既不是 AMD 也不是 CommonJS http docs angularjs org guide module 我有许多 AMD 格式的现有模块 我想在 Angular 应用程序
  • ADL 是否适用于全局命名空间?

    Examples https stackoverflow com a 5076640 321013 such as https groups google com forum original comp lang c moderated 1
  • 多个 Android 应用程序依赖于带有 gradle 的 android 库

    我仍在学习 gradle 但根据我所读到的内容 我想知道这是否可能 我有多个 Android 应用程序 app1 app2 app3 它们依赖于 android 库 L android 库 L 将依赖于 volley 等外部库 而应用程序将
  • 如何在android中的NumberPicker中自定义数字的值?

    我有一个数字选择器 用于设置以 MB 为单位的数据限制 现在 我有 numberPicker 包含按顺序排列的数值 如 1 2 3 2000 MB 但我想要一个应包含 100 200 300 2000MB 等数值的 numberPicker
  • PostgreSQL psycopg2 返回字符串元组而不是元组元组?

    我有一个奇怪的问题 在搜索 Google SO 没有发现类似的情况后 我不太确定如何解决它 当我尝试从光标获取查询结果时 它给了我一个元组的元组 除了元组是字符串 下面是代码 def queryFeeds db sql SELECT ngo
  • 如何在作业开始前清理 Jenkins 管道中的工作区

    我需要在构建开始之前清理工作区 我尝试使用cleanDir 分阶段进行 但在声明性管道中 检查首先发生 并且当阶段与cleadDir运行时 签出的代码也会被清除 这是不希望的 在声明式管道中签出之前 我们如何清除工作区 实际上 我必须根据管
  • 如何将本地 django 制作的站点移动到另一台机器上?

    我努力寻找我的查询的解决方案 但没有成功 我在本地机器上使用 django 制作了一个网站 现在我想在另一台机器上安装相同的 django 制作的网站 MySQL是我正在使用的数据库 如何将本地 django 制作的网站移动到另一台机器上
  • PHP - Postgresql 如果返回错误,如何回滚查询?

    我正在使用 php 和 postgres 进行 CRUD 我想知道如果出现错误是否有办法回滚事务 实际上 如果我在事务中遇到错误 id 主键 就会增加 然后我会丢失一个 id 以供将来使用 我该如何预防 我的意思是 如果插入查询失败 不要在
  • 套接字无法连接到端点

    var socket new Socket localhost 4000 socket connect Returns WebSocket connection to ws localhost 4000 ws failed Error du
  • 扩展 Backbone.Collection 原型

    继从这个问题 https stackoverflow com questions 10219182 retrieve element from backbone collection removen 我正在尝试使用一些自定义方法来增强 Ba
  • AWS lambda函数在超时错误后停止工作

    我有一个简单的 lambda 函数 它异步进行 API 调用 然后返回数据 99 的情况下这都非常有效 当 API 花费的时间超过 lambda 配置的超时时间时 它会按预期给出错误 现在的问题是 当我对 lambda 函数进行任何后续调用
  • Xcode 5 中的代码签名

    我在 Xcode 5 中验证我的应用程序时遇到问题 我在 2 周前提交了更新 Xcode 4 正常 我没有触及任何证书或配置文件 当我尝试验证时 我得到 当我尝试下载身份时 Xcode 崩溃了 我进入偏爱 gt accounts并刷新了我的
  • 如何删除iOS应用程序中呼叫某人时的弹出窗口? [复制]

    这个问题在这里已经有答案了 我想建议用户从应用程序拨打电话 并弹出一个带有特定文本的窗口 我首先向他展示弹出窗口 如果他同意 然后我运行代码从应用程序拨打电话 但与使用无关tel telprompt tel 对于链接 我总是从系统中弹出第二
  • 使用 Flask wtforms 验证器而不使用表单

    我正在从 iOS 应用程序接收用户注册数据 我想使用 wtforms 附带的验证器来确保电子邮件和密码可接受 但是 我没有使用 Flask 表单 因为用户是从 iOS 文本字段输入数据 是否可以使用 wtforms 验证器检查传入的 JSO