在数据库和Web显示的界面中进行错误处理的最佳策略

时间:2013-09-30 00:28:35

标签: python database database-design pyramid

我决定在经过100次来回试图提出错误处理例程以优化数据完整性同时考虑速度和效率(并且在此过程中浪费100个小时)时提出这个问题。所以这是设置。

Database  ->  python classes  ->   python code     ->   javascript
 MongoDB  |   that represent  |   that serves      |  web interface
                the data         pages (pyramid)      

我希望数据是健壮的,这是头号要求。所以现在我在页面的javascript端验证数据,但也在python类中验证,它们更多地表示数据结构。虽然大多数服务器例程都是通过python类运行的,但考虑到它必须通过不同级别的错误检查,有时会觉得效率低下。

编辑:我想我应该澄清一下。我不打算统一客户端和服务器端代码的验证。对不起写的不好。我正在寻找更多来确定应该在哪里进行服务器端验证。它应该是数据库的直接接口,还是接收数据的Web服务器代码。

例如,如果我有一个带条形码的对象,我应该验证通过AJAX审查数据的代码中的条形码,还是应该调用对象的class并在那里验证?

同样,是否有关于如何进行错误检查的指导方针?我希望自己有点专业,并且学习但希望不必阅读整本书。

我不是软件工程师,但我希望那些熟悉复杂项目的人可以告诉我在这种情况下我可以找到关于如何建模/错误检查的指南。

我不一定在寻找答案,但更像是在创建具有不同层次的项目时指向一小段指导原则。希望不会太长......

我甚至不知道在帖子中使用什么标签。 HELP !!

2 个答案:

答案 0 :(得分:2)

在客户端上进行验证并在服务器上进行验证完全可以达到不同的目的。在服务器上进行验证是为了确保您的模型不变量保持不变并且必须完成以保持数据完整性。在客户端上进行验证是因为用户有一个友好的错误消息,告诉他他的输入将验证数据的完整性,而不是在他的脸上引起追踪。

因此,在服务器上进行验证时,您只关心数据是否有效,这是一个微妙的区别。在客户端上,您还可以在更精细的级别上关注为什么输入可能无效。 (在客户端必须处理的另一件事是输入格式错误,即输入预期数字的字符。)

有可能在中间见面一点。如果以声明方式指定模型有效性约束,则可以使用该元数据生成客户端验证的某些,但它们并不足够。一个很好的例子是用户注册。通常您需要两个密码字段,并且您希望两者中的输入匹配,但模型将只包含一个密码属性。您可能还想检查密码复杂性,但它不一定是域模型不变量。 (即,即使用户密码较弱,您的应用程序也能正常运行,并且密码复杂性策略可能会随着时间的推移而发生变化而不会破坏数据完整性。)

客户端验证的另一个问题是您经常需要在验证检查之间表达依赖关系。即您有一个必填字段,其数字必须低于100。您需要验证a)该字段是否有值; b)字段值是有效整数; c)字段值低于100。如果这些检查中的任何一个失败,您希望避免显示不必要的错误消息以便在序列中进一步检查,以告诉用户他的具体错误是什么。该模型并不需要关心这种区别。 (旁白:这是一些框架失败的地方 - 无论是JSF还是Spring MVC,或者它们中的任何一个首先尝试从输入字符串到表单对象属性进行数据类型转换,如果失败,它们就无法执行任何进一步的验证。 )

总之,以上暗示如果您关心数据完整性,可用性,您必须至少两次验证数据,因为验证实现了不同的目的即使有一些重叠。与模型层验证相比,客户端验证将具有更多检查和更细粒度的检查。我不会真正尝试统一它们,除非您选择的框架使其变得容易。 (我不了解Pyramid - Django将这些问题分开,因为Form s与您的Model不同,两者都可以被验证,并且他们加入了ModelForm s允许您为模型执行的验证添加其他验证。)

答案 1 :(得分:0)

我不确定我是否完全理解您的问题,但可以在此处找到pymongo上的错误处理 -

不确定您是否使用特定的ORM - 文档中包含可用内容的链接,这些内容各自都有自己的最佳用法:

你有一个特定的ORM正在使用,或通过pymongo实现自己的ORM吗?

相关问题