哪一种是表单验证的正确方法? Colander 的模式验证还是 Deform 的表单验证?

2023-12-11

我刚刚开始使用Pyramid对于我的一个项目,我有一种情况,我需要验证表单字段输入,方法是获取该表单字段值并进行 Web 服务调用来断言该值的正确性。例如,有一个字段称为您银行的 CUSTOMER-ID。我需要将其(单独)作为输入,并通过进行 Web 服务调用(例如http://someotherdomain/validate_customer_id/?customer_id=<input_value>)可以说。

我在用Colander用于表单架构管理和Deform对于所有表单验证逻辑。我对需要在哪里放置 CUSTOMER-ID 案例的验证逻辑感到困惑。是在MySchema().bind(customer_id=<input_value>)(它有一个查询网络服务的延迟验证器)或 form.validate(request.POST.items()) 中的某些内容?如果我采用延迟验证器的路径,那么MySchema().bind正在提高colander.Invalid因 CUSTOMER-ID 不正确而出现错误。没关系。但该错误不是在表单级别,而是在架构级别。那么我该如何以理智的方式告诉用户这一点呢?

我对 Django 表单有很好的经验,所以我期待类似的东西clean方法。像 form['customer_id'].error 这样的表单错误是我在模板级别所期望的。是否可以使用 Pyramid's Deform 或漏勺?


所以我认为你遇到的最大问题是理解滤锅和变形的关注点分离。人们喜欢将 Colander 称为通用模式验证库。这意味着我们定义一个模式,其中每个节点都有特定的数据类型,并且某些节点可能是必需的/可选的。然后,漏勺能够验证该模式,并告诉我们传递给漏勺的数据是否符合该模式。举个例子,在我的网络应用程序中,我经常构建接受需要验证的 GET/POST 参数的 api。所以在金字塔中,假设我有这样的场景:

request.POST = {
    'post_id': 1,
    'author_id': 1,
    'unnecessary_attr': 'stuff'
}

然后我可以像这样验证它:

# schema
schema = SchemaNode(Mapping(),
                    SchemaNode(Integer(), name='post_id'),
                    SchemaNode(Integer(), name='author_id'))
schema.deserialize(request.POST)

如果数据不能符合指定的模式,则会出错。所以你可以看到,漏勺实际上可以用来验证任何数据集,无论是来自 POST/GET/JSON 数据。另一方面,变形是一个表单库,可以帮助您创建/验证表单。它使用漏勺来满足所有验证需求,如你看到的它几乎完全将验证委托给漏勺。因此,为了回答您的问题,您将在漏勺中完成所有验证工作,而变形将主要处理表单的渲染。

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

哪一种是表单验证的正确方法? Colander 的模式验证还是 Deform 的表单验证? 的相关文章

  • 如何在 PHP 中验证电子邮件? [复制]

    这个问题在这里已经有答案了 如何使用 php5 验证输入值是有效的电子邮件地址 现在我正在使用这段代码 function isValidEmail email pattern a z0 9 a z0 9 a z0 9 a z0 9 a z
  • 不允许使用 HTTP 谓词 POST 来访问路径“[我的路径]”

    我收到一条错误 指出 不允许使用 HTTP 动词 POST 来访问路径 我的路径 该错误是由于我正在实现一个使用 POST 方法的 HTML 表单元素并且未在其 ACTION 参数中显式定义 aspx 页面而引起的 例如
  • 无法在 onclick 函数中传递多个参数

    我正在尝试创建一个上传机制 其中我可以使用 HTML 中的文件 ID 将文件上传到 google 驱动器中 我不想将文件夹的 ID 放在上传函数中 因为这是需要的 我试图通过声明另一个参数 即函数 upload e id 来传递函数 upl
  • Javascript onchange 事件阻止 HTML 表单中的 onsubmit 事件?

    考虑一个 HTML 表单
  • 提交表单后关闭featherlight

    我有一个 demo employee php 页面 它检索系统的所有用户以及可以执行的特定操作 td table tr td a href i class fa fa pencil square o i a td td a href i c
  • 验证电子邮件地址是否包含“@”和“.”

    我需要验证插入的电子邮件地址是否包含 和 没有正则表达式 有人能给我 java代码 和 结构图 的例子吗 I suspect你正在追求类似的东西 if address contains address contains Handle bad
  • LINQ2SQL:如何实现通用最大字符串长度验证?

    LINQ2SQL 中的一个常见问题是 虽然 NET 字符串允许为其变量分配任意长度 但您的数据库可能具有特定的最大长度约束 如 VARCHAR 5 这将导致 SQL 错误消息 字符串或二进制数据将被截断 这是非常没有帮助的 因为它不会告诉您
  • 在 Access 表单上将控件分组在一起

    我有一个 Access2003 表单 我想将多个控件组合在一起并通过 VBA 代码以编程方式更改可见性 这可能吗 我确实知道我可以通过 格式 gt 组 对项目进行分组 但如果这样做 如何在代码中引用整个组 谢谢 您可以将所有控件放置在组框控
  • 如何修复 Django 应用程序的评论视图中的此错误?

    我正在尝试用 Django 开发一个应用程序 目前 我正在尝试创建一个评论部分 供用户使用表单撰写和提交评论 我制作了一个模板 显示电影的信息以及用户可以对电影发表评论的表单 问题是 当我编写评论并尝试提交时 会出现此错误 myapp2 2
  • Fluent 验证和库

    前几天在寻找完全不同的东西时 我偶然发现了两个用于在 NET 中进行流畅验证的库 这个概念似乎很有趣 因为到目前为止我正在使用通常的条件和分支语句 if else case 等 进行验证 特别是 它使得链接某些条件相对容易 这些条件在某些情
  • 在浏览器中刷新页面而不重新提交表单

    我是一名 ASP NET 开发人员 我通常会发现自己正在浏览器中打开正在处理的网页 Chrome 是我选择的浏览器 但这个问题与任何浏览器都相关 我的工作流程通常是这样的 编写代码 在 Visual Studio 中重建项目 然后使用 Al
  • 你把你的验证放在 asp.net mvc 3 的哪里?

    ASP NET MVC 中一种常见的推荐做法是您不应该将您的商业模式发送到您的视图中 http lostechies com jimmybogard 2009 06 30 how we do mvc view models 相反 您应该创建
  • 如何重置 jQuery 中的单选按钮,以便不检查任何单选按钮

    我在 HTML 中有这样的单选按钮 td td
  • 如何在 WTForms 中使字段有条件可选?

    我的表单验证工作已接近完成 我只有两种情况 我不知道具体如何解决 1 密码字段当然应该是必需的 但我还提供了通过 OAuth 使用 google 或 facebook 帐户登录的可能性 然后名称被预先填充 但我从表单中完全删除密码字段是否有
  • 在node.js中使用pug在表单“post”之后发送空的{}

    我正在尝试使用 fetch 和以下 pug 代码通过 post 将表单数据从登录页面传递到登录页面 form id form login input type text name email value placeholder Tu ema
  • Codeigniter:重置表单值

    在我看来 我想要做的是在用户成功注册后清除表单字段 这里一切正常 即用户正在注册 成功消息正在向用户显示 除了我想要做的是清除表单字段的值 我正在使用这个 Clear the form validation field data so th
  • 多语言标记验证器

    是否有免费的在线多语言标记验证服务可以正确识别和验证多语言标记 我确实找到了totalvalidator和htmlvalidator 但这些是 付费 非基于网络的解决方案 Use http validator w3 org nu http
  • 回形针不支持 .doc 文件

    在 Rails 4 0 2 中 我使用回形针 gem 上传文件 但它不支持 doc 文件 在文件上传字段下方 显示一条错误消息 扩展名与其内容不匹配 在模型中 检查内容类型的验证如下 validates attachment content
  • 很好地处理数据库约束错误

    再一次 它应该很简单 我的任务是在我们的应用程序的域对象中放置一个具有唯一约束的特定字段 这本身并不是一个很大的挑战 我刚刚做了以下事情 public class Location more fields Column unique tru
  • 禁用 notInArray 验证器 Zend Framework 2

    有没有办法在 Zend Framework 2 中禁用 notInArray Validator 互联网上的所有信息都显示如何在 Zend Framework 1 中禁用 notInArray Validator 例如以这种方式 如果您根本

随机推荐

  • 使用 8 张图像在 UIImageView 周围创建边框

    I have 8 images I made 4 images for each of the corners and 4 images for each of the sides of UIImageView Now how on Ear
  • 在 Spring 中创建临时 JMS jms 主题

    我正在尝试重构一些遗留代码以使用 Spring 处理与大型机服务的 jms 连接 我需要连接为大型机服务回复创建一个临时主题并将其设置为message setJMSReplyTo replyTo 在我发送消息之前的消息中 谁能提供这方面的例
  • Logstash 中需要 #、输入、过滤器、输出之一

    我试图通过简单地执行文档中给出的命令来回显所输入的内容来使 Logstash 安装工作 但这给了我以下错误 我的命令 C logstash 1 4 0 bin gt logstash bat agent e input stdin outp
  • 如何使用 Laravel 的 Paginate() 输出当前迭代?

    Laravel 5 2 应用程序 我的控制器中有一个函数 它使用 order by 子句查询我的数据库 然后我对其进行分页 public function foo results DB orderBy name desc gt pagina
  • 如何确保 Node.js 在 MongoDB 连接断开后继续运行?

    我在 Express 中有一个错误处理中间件 它尝试捕获所有传入的错误 app use function err req res next console error err stack res status 500 res render
  • 将图像从 azure blob 存储转换为 Base64?

    我正在尝试将图像从 Azure blob 存储转换为 base64 private static string FromAzureToBase64 string azureUri Uri blobUri new Uri azureUri C
  • 将 R 县地图叠加到州地图上

    R新手在这里 如果我第一次使用map state 我该如何使用map county ylim xlim 但像这样抵消它 现在 我正在使用 imagemagickcomposite gravity southwest 合并 2 个 PNG 文
  • 如何在 Vim 中为命令创建别名?

    Vim 是我编程时首选的文本编辑器 因此我总是遇到一个特别烦人的问题 通常 当我快速需要保存缓冲区并继续执行其他杂项任务时 我会执行典型的操作 w 然而 我总是 似乎超过 50 的时间 设法利用这一点 w 很自然地 Vim 对我大喊大叫 因
  • 带边框的纯 css 树

    我正在尝试用纯 CSS 创建一棵带有缩进的树 我一直在尝试使用类似的东西 ul tree ul padding left 5px 但是我想在列表中的每个项目之间进行分隔 如果我使用上面的代码 分隔栏也会缩进 所以它不太好 这是我当前的代码
  • 带切换功能的 SwiftUI onDelete 列表

    这是我对这个问题的第三个问题 到目前为止还没有不崩溃的解决方案 我想用切换来滑动删除列表 我的 简化的 代码如下所示 struct Item Identifiable var id UUID var isOn Bool struct Con
  • Windows C 运行时 _close(fd) 未关闭文件

    我们在使用 C 和 C 混合编写的 Windows 应用程序进行生产时遇到问题 其中 MoveFileEx 偶尔会报告 该进程无法访问该文件 因为该文件正在被另一个进程使用 这个问题很少见 但最近我们已经能够在我们的开发环境中重现该问题 发
  • 如何在 JavaScript 中重新定义数组上的 + 运算符?

    假设点是使用 JavaScript 表示的Array as x y 我如何定义 点上的运算符 1 2 5 10 6 12 JavaScript 没有覆盖内置算术运算符的功能 您可以通过覆盖一些有限的技巧来实现 valueOf and toS
  • 如何使用 Java 将 BsonDocument 对象写入文件并再次读取它

    我想将 BsonDocument 输出到文件系统 而不是 mongodb 然后使用 java 再次读取它 但目前的BasicBSONencoder仅支持旧版本的BSONObject 如何将BsonDocument编码为二进制 或者有什么方法
  • 如何在整个子查询上使用 group_concat?

    无需进行不必要的比较 我想获得一系列行的 md5 哈希值 由于带宽限制 我希望它发生在服务器端 这有效 create table some table id int auto increment col1 varchar 1 col2 in
  • 如何删除数据框列的标题

    我想出了一个像这样的数据框 我想知道我们如何更改或删除 id 和 date 因为它们只是索引和列的名称 id col1 col2 clo3 date 2000 01 03 55 500000 NaN NaN 2000 01 04 52 81
  • 使用 ImageMagick 将 PDF 转换为 PNG 或 JPEG 非常非常慢

    我有一个使用 PHP 和 ImageMagick 的 PDF 到 PNG 转换脚本 但我遇到了转换速度问题 我知道它是有效的 因为对于非常小的 PDF 转换所需的时间并不是那么长 但是对于 250kb 文件 实际上仍然不是那么大 转换需要超
  • 如何控制winform mschart图例文本对齐c#?

    如何设置图表图例对象中的文本对齐方式 我尝试过使用 myChartName Legends mySeriesName Alignment stringAlignment Near 没有效果 我还尝试创建自定义图例项目 同样没有效果 文本始终
  • FirefoxDriver webdriver.load.strategy 不稳定 findelements 从错误页面获取元素

    我在一个应用程序中使用 FirefoxDriver 该应用程序可以快速浏览几个相似但不相同的页面 为了加快执行速度 我需要使用 FF 我将 webdriver load strategy 属性设置为 不稳定 这确实通过不完全加载页面来加快速
  • python groupby 行为?

    gt gt from itertools import groupby gt gt keyfunc lambda x x gt 500 gt gt obj dict groupby range 1000 keyfunc gt gt list
  • 哪一种是表单验证的正确方法? Colander 的模式验证还是 Deform 的表单验证?

    我刚刚开始使用Pyramid对于我的一个项目 我有一种情况 我需要验证表单字段输入 方法是获取该表单字段值并进行 Web 服务调用来断言该值的正确性 例如 有一个字段称为您银行的 CUSTOMER ID 我需要将其 单独 作为输入 并通过进