首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >DataRequired验证器已损坏,用于wtforms.BooleanField

DataRequired验证器已损坏,用于wtforms.BooleanField
EN

Stack Overflow用户
提问于 2014-05-15 06:54:45
回答 1查看 2.7K关注 0票数 5

我使用WTForms (连同烧瓶、烧瓶-wtf、sqlalchemy)来验证REST传入的JSON。我意识到WTForms更多地针对HTML的呈现和验证,但我选择它是因为它可以从我的sqlalchemy模型中自动生成表单(多亏了wtforms.ext.sqlalchemy)。

不管怎样,问题就在这里。我的模型之一包括布尔字段,它通过DataRequired验证器转换为DataRequired。问题是,即使我传递正确的数据,“此字段是必需的”错误信息也会导致验证失败。我的表格:

代码语言:javascript
运行
AI代码解释
复制
class MyForm(Form):
    name = TextField('name', validators=[DataRequired()])
    disabled = BooleanField('disabled', validators=[DataRequired()])

JSON数据如下所示:

代码语言:javascript
运行
AI代码解释
复制
'{"name": "John", "disabled": "false"}'

我期待的是:

  1. {"disabled": "false"} ->验证成功的、胁迫的Python数据:{'disabled': False}
  2. {"disabled": "true"} ->验证成功的、胁迫的Python数据:{'disabled': True}
  3. {"disabled": ""}'{"disabled": "foo"}' ->验证失败

目前,在第一次验证中,{'disabled': [u'This field is required.']}失败了。

我知道文档中有一条注释说,DataRequired验证器“需要被胁迫的数据,而不是输入数据”,但是1)表单是由wtforms.ext.sqlalchemy自动生成的,2)如果我使用InputRequired验证器,它应该如何运行?检查(通过form.validate())某些数据是否存在,然后检查该数据是否为“真”或“假”?

总之,我的问题是:

  1. 验证wtforms.BooleanField的正确方法是什么?
  2. 也许还有其他框架可以根据给定的sqlalchemy模型验证传入的JSON?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-05-15 08:23:12

有很多方法可以解决这个问题。您可以编写自己的转换器,以便使用具有真/假选择的无线电场,您可以使用数据过滤器,您可以设置默认值,但我认为您想要的行为将是可能的:

代码语言:javascript
运行
AI代码解释
复制
MyForm = model_form(MyModel, db_session=db, field_args = {
    'disabled' : {
        'false_values': ['false'],
        'validators' : [InputRequired()] }
})

编辑:如果需要更严格的处理程序,可以执行以下操作:

代码语言:javascript
运行
AI代码解释
复制
class BooleanRequired(object):
    field_flags = ('required', )

    def __init__(self, message=None):
        self.message = message

    def __call__(self, form, field):
        if field.data is None:
            if self.message is None:
                message = field.gettext('This field is required.')
            else:
                message = self.message

            field.errors[:] = []
            raise StopValidation(message)


class StrictBooleanField(BooleanField):
    def process_formdata(self, valuelist):
        self.data = None
        if valuelist:
            if valuelist[0] == 'false':
                self.data = False
            elif valuelist[0] == 'true':
                self.data = True


class StrictModelConverter(ModelConverter):
    @converts('Boolean')
    def conv_Boolean(self, field_args, **extra):
        return StrictBooleanField(**field_args)

MyForm = model_form(MyModel, db_session=db, converter=StrictModelConverter(),
           field_args = { 'disabled' : { 'validators': [BooleanRequired()] }
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23681846

复制
相关文章
MyBatis Plus 常用 API 全套教程,看完没有不懂的
注意:-- 真实开发中往往都会有这四个字段,version(乐观锁)、deleted(逻辑删除)、gmt_create(创建时间)、gmt_modified(修改时间)
芋道源码
2021/01/08
1.1K0
MyBatis Plus 常用 API 全套教程,看完没有不懂的
进阶!MyBatis-Plus(基于 Springboot 演示)
这一篇从一个入门的基本体验介绍,再到对于 CRUD 的一个详细介绍,在介绍过程中将涉及到的一些问题,例如逐渐策略,自动填充,乐观锁等内容说了一下,只选了一些重要的内容,还有一些没提及到,具体可以参考官网,简单的看完,其实会发现,如果遇到单表的 CRUD ,直接用 MP 肯定舒服,如果写多表,还是用 Mybatis 多点,毕竟直接写 SQL 会直观一点,MP 给我的感觉,就是方法封装了很多,还有一些算比较是用的插件,但是可读性会稍微差一点,不过个人有个人的看法哇
BWH_Steven
2020/10/10
6560
Mybatis-plus常用API全套教程,看完没有不懂的
注意:-- 真实开发中往往都会有这四个字段,version(乐观锁)、deleted(逻辑删除)、gmt_create(创建时间)、gmt_modified(修改时间)
业余草
2020/12/29
4600
Mybatis-plus常用API全套教程,看完没有不懂的
注意:-- 真实开发中往往都会有这四个字段,version(乐观锁)、deleted(逻辑删除)、gmt_create(创建时间)、gmt_modified(修改时间)
java进阶架构师
2021/01/20
4200
Mybatis-plus常用API全套教程,看完没有不懂的
Mybatis-plus常用API全套教程,看完没有不懂的
注意:-- 真实开发中往往都会有这四个字段,version(乐观锁)、deleted(逻辑删除)、gmt_create(创建时间)、gmt_modified(修改时间)
Java识堂
2021/09/27
3521
Mybatis-plus常用API全套教程,看完没有不懂的
注意:-- 真实开发中往往都会有这四个字段,version(乐观锁)、deleted(逻辑删除)、gmt_create(创建时间)、gmt_modified(修改时间)整理了一份272页MybatisPDF文档
程序员白楠楠
2021/01/19
7220
SpringBoot中的自动代码生成 - 基于Mybatis-Plus
大家好啊,我是汤圆,今天给大家带来的是《SpringBoot中的自动代码生成 - 基于Mybatis-Plus》,希望对大家有帮助,谢谢
汤圆学Java
2021/04/22
1.1K0
基于docker可使用的api
https://github.com/spotify/docker-client
cn華少
2018/09/11
8100
Envoy 基于 API 的动态配置
当在 Envoy 配置中定义了上游集群后,Envoy 需要知道如何解析集群成员,这就是服务发现。端点发现服务(EDS)是 Envoy 基于 gRPC 或者用来获取集群成员的 REST-JSON API 服务的 xDS 管理服务。在本节我们将学习如何使用 REST-JSOn API 来配置端点的自动发现。
我是阳明
2020/06/30
3.2K1
基于GAN的自动驾驶汽车语义分割
语义分割是计算机视觉中的关键概念之一,语义分割允许计算机通过按类型对图像中的对象进行颜色编码。GAN建立在基于真实内容的基础上复制和生成原始内容的概念上,这使它们适合于在街景图像上进行语义分割的任务,不同部分的分割使在环境中导航的代理能够适当地发挥作用。
小白学视觉
2021/03/30
1K0
基于GAN的自动驾驶汽车语义分割
基于curl 的zabbix API调用
1,认证并取得加密字段 curl -i -X POST -H 'Content-Type: application/json' -d '{"jsonrpc": "2.0","method":"user
小小科
2018/05/04
3.1K0
基于curl 的zabbix API调用
基于TRIZ突破汽车芯片技术瓶颈
随着智能化和自动化的发展,汽车行业对于芯片技术越来越依赖。然而,汽车芯片技术发展遇到了瓶颈,如何突破这一瓶颈,成为了业内热议的话题。
用户9972271
2023/05/18
2800
基于 SpringBoot + Vue3.2 + Element Plus 的后台管理系统
TANSCI 基于 SpringBoot + Vue3.2 + Element Plus 的后台管理系统。
默存
2022/06/24
1.5K0
基于 SpringBoot + Vue3.2 + Element Plus 的后台管理系统
点击加载更多

相似问题

UIButton返回时丢失文本标签

21

xamarin表单中的StackLauout标签文本对齐

12

用标签xamarin表格对文本进行对齐

22

对齐页的标签和文本框

44

Xamarin窗体-打开标签时打开的多页

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文