model - pylons:在模型层验证数据

标签 model pylons validation

我正在评估一些 Web 应用程序框架,最后,两个最大的竞争者(在我看来)是 Ruby on Rails 和 Pylons。为了在不花费太多时间的情况下更好地理解这两个框架,我决定在一个框架上遵循一个重要的应用教程,并尝试在另一个框架上重复同样的事情。我希望这个练习能够突出明显的差异。

对于我的实验,我选择了 Ruby on Rails Tutorial .我已经在 Rails 中完成了应用程序,现在,我已经开始在 Pylons 中完成它。我已经到达第 6 章而没有太多戏剧性(考虑到到那时它主要是静态页面,这并不奇怪)。现在,我需要为用户实现模型,并将验证逻辑添加到模型中。第一部分很简单,但我卡在了第二部分。

据我所知,Pylons 采用了在表单级别实现验证的方法。做一些研究,我看到很多人建议您接受表单输入的地方是输入验证的正确位置。我还在 github 上浏览了很多 pylons 项目,但我一直没能找到一个处理模型级数据验证的项目。我见过的最接近的是开发人员将他们的表单与模型层中的数据一起存储,但我认为这是作弊。我不介意不严格遵循教程并随大流,但我碰巧同意教程。对于所讨论的模型,验证是在正确的地方完成的:检查密码长度、用户名长度,并验证电子邮件是否真的是电子邮件,所有这些都感觉是模型级别的约束。此外,如果我将至少有两种形式将数据添加到此模型(创建新用户和修改信息),并且以两种不同的形式重复相同的验证听起来不对。

长话短说(为 TLDR 突出显示):是否有一种基础设施可供我使用,它比建议的 SQLAlchemy/formencode 对更紧密地将表单与模型联系起来?这两个,我能做的最好的就是在模型层添加断言。实际上,这不是真的,我可以尝试用自定义代码弥合差距,但它看起来确实有很多代码,而且很难做到正确。因此,我认为在尝试扩展我并不真正理解的代码之前先四处询问会更好。

最佳答案

首先,我不知道有任何内置方式。表单级别的验证很有意义,因为不同的表单/ View 可能会访问相同的模型,并且需要根据当前用户、情况(基于时间)等执行不同的验证。所以我是其中之一,将验证作为一部分事物的 Controller 级别。

现在关于您的观点是大量代码,我认为您可以轻松地将 formencode 方案创建为您的 SqlAlchemy (SA) 模型的一部分,然后只需挂接到对象 save() 的 SA 事件并运行那里的验证模式。或者编写一个包装函数,用于在执行保存之前填充初始对象。所以而不是:

person = Session.Query(People).get(10)
person.fname = request.params['fname']
person.lname = request.params['lname']

你会做一些更像是:

person = Session.Query(People).get(10)
person.populate(request.params)

它会遍历对象中的参数和列来设置它,并在此过程中进行验证。

很抱歉,没有您要找的东西,但希望这能帮助您找到合适的中间立场。

关于model - pylons:在模型层验证数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4092033/

相关文章:

model - 无法在 Titanium Appcelerator 中使用合金更新模型

c++ - 嵌套模型/ View 架构

django - 过滤 Django 管理员选择框的模型结果

python - Pylons:如何编写自定义 404 页面?

Python nosetests 跳过某些测试

php - 服务层和模型与领域驱动设计的关联

python - 当我尝试启动粘贴服务时 pkg_resources.VersionConflict

c# - MVVM - 验证

javascript - 如何根据给定结构验证 html5 文档?

java - java swing 中的电话号码验证