使用models.py
模块中的以下两行连接MongoDb服务器,然后import models.py
内的views.py
有什么区别:
from pymongo import MongoClient
db = MongoClient()['name']
我刚刚开始玩Pyramid和MongoDb,我使用了第一种方法,效果很好。然后我发现人们使用第二种方法。
我做错了吗?
答案 0 :(得分:0)
你所做的事情没有错误,但是如果你的应用程序变得复杂,那么未来的证据就会减少。您使用的模式有时称为“将模块用作单例”。第一次导入模块时,代码会运行,创建一个模块级对象,可以从从该模块导入的任何其他代码中使用。这没有什么不对,这是一个普通的python模式,这也是你在python land中看不到单例样板的原因。
然而,在一个复杂的应用程序中,无论谁在何时进行输入,都可以准确控制发生的事情。当我们按照文档示例在配置时创建客户端时,您知道它在配置(服务器启动)块运行时创建,而不是每当任何代码导入您的模块时,您知道从那时起,它可通过您的注册表获得,该注册表可通过请求对象在Pyramid应用程序中的任何位置访问。这是正常的金字塔最佳实践:在服务器启动代码中设置所有一次性共享请求机器,在那里创建配置器,并且(可能)将它们附加到配置器或其注册表。
这与我们将请求生命周期回调挂钩的原因相同,它允许我们知道某些请求代码执行的位置和时间,并确保在请求结束时始终触发清理帮助程序生命周期。因此,对于数据库访问,我们在配置启动时创建共享机制,并在请求开始时创建每个连接代码,然后在请求结束时进行清理。对于SQL db,这意味着启动事务,然后在最后提交或回滚。
因此,对于您的应用现在来说可能无关紧要,但这是增加代码库的良好做法。大多数金字塔设计决策都是针对复杂的代码情况而做出的。