django包装组织

时间:2013-04-06 06:06:33

标签: python django django-models package

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

感谢。

3 个答案:

答案 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留空吗?

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