Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在数据库和web显示界面中处理错误的最佳策略_Python_Database_Database Design_Pyramid - Fatal编程技术网

Python 在数据库和web显示界面中处理错误的最佳策略

Python 在数据库和web显示界面中处理错误的最佳策略,python,database,database-design,pyramid,Python,Database,Database Design,Pyramid,在反复尝试放置错误处理例程以优化数据完整性,同时考虑速度和效率(并在过程中浪费100个小时)之后,我决定问这个问题。下面是设置 Database -> python classes -> python code -> javascript MongoDB | that represent | that serves | web interface the data pages (py

在反复尝试放置错误处理例程以优化数据完整性,同时考虑速度和效率(并在过程中浪费100个小时)之后,我决定问这个问题。下面是设置

Database  ->  python classes  ->   python code     ->   javascript
 MongoDB  |   that represent  |   that serves      |  web interface
                the data         pages (pyramid)      
我希望数据是健壮的,这是首要要求。因此,现在我在页面的javascript端验证数据,但也在python类中验证数据,python类大致代表数据结构。虽然大多数服务器例程通过python类运行,但由于必须通过不同的类,有时会觉得效率低下大量的错误检查

编辑:我想我应该澄清一下。我不想统一客户端和服务器端代码的验证。很抱歉写得不好。我更想弄清楚服务器端验证应该在哪里进行。它应该在数据库的直接接口中,还是在接收数据的web服务器代码中进行。

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

再说一遍,一般来说,有没有关于如何进行错误检查的指导原则?我想成为一名专业人士,并学习,但希望不必阅读整本书。

我不是一名软件工程师,但我希望你们中熟悉复杂项目的人能告诉我,在这种情况下,我在哪里可以找到一些关于如何建模/错误检查的指导原则

我不一定在寻找答案,但更像是在创建具有不同层的项目时为我指出一套简短的指导原则。希望不会太长


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

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

不确定您是否正在使用特定的ORM-文档中有指向可用内容的链接,这些链接各自有其最佳用途:


您是否有正在使用的特定ORM,或通过pymongo实现您自己的ORM?

在客户端验证和在服务器上验证的目的完全不同。在服务器上验证是为了确保模型不变量保持不变,并且必须进行验证以保持数据完整性。在客户端验证是为了让用户有一个友好的错误消息告诉他,他的输入将验证数据的完整性,而不是让回溯爆炸到他的脸上

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

可以在中间遇到一点。如果声明性地指定了模型的有效性约束,可以使用该元数据生成一些客户端验证,但它们并不十分充分。一个很好的例子是用户注册。通常您需要两个密码字段,并且希望两者的输入匹配,但是模型将只包含密码的一个属性。您可能还希望检查密码复杂性,但它不一定是域模型不变的。(也就是说,即使用户的密码较弱,您的应用程序也会正常运行,并且密码复杂性策略可以随时间而更改,而不会破坏数据完整性。)

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


总之,上述内容意味着,如果您关心数据的完整性和可用性,那么您必须至少验证数据两次,因为即使存在一些重叠,验证也会达到不同的目的。客户端验证将比模型层验证有更多的检查和更细粒度的检查。我不会真正尝试统一它们,除非您选择的框架使其变得容易。(我不知道金字塔-Django将这些关注点分开,因为
表单
s与您的
模型
s是不同的层,两者都可以验证,并且它们由
模型表单
s连接,允许您向模型执行的验证添加额外的验证。)

非常感谢。不过,我更多的是寻找关于服务器端验证的指南。对不起。@xcorat我刚意识到我的措辞太糟糕了。(我写anserr的时候是凌晨2点。)“客户端验证”应该是“在用户界面中完成的验证”。这显然可以通过web框架在服务器端执行。“服务器端验证”是指“保存或更新模型实体时完成的验证”-这不一定是用户直接输入的结果,但可能是操作的副作用。@xcorat我想更好的名称应该是“视图层验证”和“模型层验证”。如果你真的是fa