我计划在Django框架中构建我的项目。但是,我注意到所有Django包都有models.py文件。现在,假设我有一组通用功能,我在项目中的几个应用程序之间共享,我计划将这些功能定义放在一个单独的包(或应用程序中)?那么,我应该创建一个应用程序“general”并将这些函数复制粘贴到models.py文件中吗?或者我可以在“常规”应用程序目录中创建general.py文件并将models.py留空吗?什么是“Django”方式呢?
感谢。
答案 0 :(得分:1)
models.py
文件用于定义数据库的结构。所以你应该留下它来定义你的数据库条目。您可以创建一个名为generals
的应用并将general.py
放入该应用中,然后您可以在任何应用中通过调用它来使用它。
答案 1 :(得分:1)
我通常在我的主应用程序下创建一个utils.py文件,该文件是在启动项目时从django-admin.py创建的。
答案 2 :(得分:1)
我打算将这些函数定义放在一个单独的包(或者应用程序中)?
在您决定将其设为应用之前(如果您决定将其设为应用),我建议您查看Developing reusable apps上的James Bennet主题演讲和laying out an application上的文章帖子。从他的一张幻灯片中:
这应该是它自己的应用吗?
- 与我正在做的其他事情正交吗?
- 我是否需要在其他网站上使用类似的功能?
- 是?然后我应该把它分解成一个单独的应用程序。
如果您在一个通用应用程序中填写太多功能,最好将通用应用程序拆分为多个可重用的应用程序。
回到原来的问题,Django希望每个应用都有models.py
个文件。所以你必须拥有该文件,即使它是空的。
在models.py
内,您应该只拥有应用程序的模型类。因此,如果您在models.py
内添加一些您想要重复使用的杂项代码,则不会遵循最佳做法。
我之前提到的laying out an application帖子:
在应用程序级别,我通常会根据应用程序的具体内容添加更多文件:
- 如果应用程序定义了任何自定义操纵器,我将它们放在名为forms.py的文件中,而不是在视图文件中。
- 如果应用中有多个自定义管理器,我会将它们放在名为managers.py的文件中,而不是模型文件中。
- 如果我正在定义任何自定义上下文处理器,我会将它们放在名为context_processors.py的文件中。
- 如果我正在设置任何自定义调度程序信号,则会进入名为signals.py的文件。
- 如果应用程序正在设置任何联合供稿,那么供稿类会进入名为feeds.py的文件中。同样,站点地图类也在sitemaps.py中。
- 中间件类位于名为middleware.py。
的文件中- 任何其他地方都没有明显的杂项代码会出现在名为utils的文件或模块中。
所有这些都不直接回答您的原始问题:
我可以在“常规”app目录中创建一个general.py文件,并将models.py留空吗?
但我希望这能为您提供更多信息,以便做出更适合您的项目和要求的决策。