0

I plan to build my project in Django framework. However, I noticed that all Django packages have models.py file. Now, let say I have a set of general purpose functions that I share between several apps in the project and I plan to put these functions definitions in a separate package (or app for that matter?). So, should I create an app "general" and copy-paste these functions into the models.py file? Or can I just create a general.py file in the "general" app directory and leave models.py empty? What is the "Django" way to do that?

Thanks.

4

3 回答 3

1

models.py文件用于定义数据库的结构。所以你应该把它留给定义你的数据库条目。您可以创建一个名为generals并放入general.py该应用程序的应用程序,然后您可以通过在任何应用程序中调用它来使用它。

于 2013-04-06T06:17:55.563 回答
1

我通常在我的主应用程序下创建一个 utils.py 文件,该文件是在启动项目时从 django-admin.py 创建的。

于 2013-04-06T06:23:18.667 回答
1

我打算将这些函数定义放在一个单独的包中(或应用程序?)

在您决定将其制作为应用程序之前(如果您确实决定将其制作为应用程序),我建议您查看 James Bennet 关于开发可重用应用程序的主题演讲和关于布局应用程序的历史帖子。从他的一张幻灯片中:

这应该是它自己的应用程序吗?

  • 它与我正在做的其他事情正交吗?
  • 我需要在其他网站上使用类似的功能吗?
  • 是的?然后我应该把它分解成一个单独的应用程序。

如果您在一个通用应用程序中塞入太多功能,最好将通用应用程序拆分为多个可重用应用程序。

回到您最初的问题,Django 期望models.py每个应用程序中都有一个文件。因此,即使文件为空,您也必须拥有该文件。

在你的内部models.py,你应该只有应用程序的模型类。models.py因此,如果您将一些想要重用的杂项代码放入其中,您将不会遵循最佳实践。

从我之前提到的布置应用程序帖子中:

在应用程序级别,我通常会根据应用程序将使用的确切内容添加一些文件:

  • 如果应用程序定义了任何自定义操纵器,我将它们放在一个名为 forms.py 的文件中,而不是在视图文件中。
  • 如果应用程序中有多个自定义管理器,我会将它们放在一个名为 manager.py 的文件中,而不是模型文件中。
  • 如果我要定义任何自定义上下文处理器,我会将它们放在一个名为 context_processors.py 的文件中。
  • 如果我要设置任何自定义调度程序信号,它们会放在一个名为 signals.py 的文件中。
  • 如果应用程序正在设置任何联合提要,则提要类进入名为 feeds.py 的文件中。同样,站点地图类位于 sitemaps.py 中。
  • 中间件类放在一个名为 middleware.py 的文件中。
  • 任何没有明确转到其他任何地方的杂项代码都放在名为 utils 的文件或模块中。

所有这些都不能直接回答你原来的问题:

我可以在“通用”应用程序目录中创建一个general.py 文件并将models.py 留空吗?

但我希望这能为您提供更多信息,以做出更适合您的项目和要求的决定。

于 2013-04-06T08:49:29.460 回答