2013-04-06 68 views
0

我打算在Django框架中构建我的项目。不过,我注意到所有的Django包都有models.py文件。现在,假设我有一组通用函数,我在项目中的几个应用程序之间共享这些函数,并且计划将这些函数定义放在一个单独的包(或应用程序中)。那么,我是否应该创建一个“general”应用程序并将这些函数复制粘贴到models.py文件中?或者我可以在“常规”应用程序目录中创建一个general.py文件并将models.py留空?什么是“Django”的方式来做到这一点?django包组织

谢谢。

+0

你知道'models.py'的用途吗? – 2013-04-06 06:17:21

回答

1

models.py文件用于定义数据库的结构。所以你应该让它定义你的数据库条目。您可以创建一个名为generals的应用程序,并将general.py放入该应用程序,然后从该应用程序中调用该应用程序。

+0

谢谢。我刚刚开始使用Django教程,并且看到它在每个应用程序中都创建了models.py。那么我应该从utils应用程序中删除models.py并将general.py放在那里? – jazzblue 2013-04-06 06:21:40

+0

我想你应该知道为什么会发生任何事情。正如我已经告诉过你'models.py'文件的目的。所以只要你不需要任何特定模型的数据库表,models.py文件无论是否存在都没有用处。 – 2013-04-06 06:24:51

1

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

1

我打算把这些功能放到一个单独的包定义(应用程序或与此有关?)

在你决定做这一个应用程序(如果你决定让它的应用),我建议你看看James Bennet在Developing reusable apps上的主题演讲,并在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的文件或模块中出现。

所有这一切都不会直接回答你原来的问题:

我能不能在“一般”的应用程序目录下创建一个general.py文件,并留下models.py空的?

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