2010-08-31 197 views
4

我处于需要将两个Django应用程序合并到一个可重用应用程序的情况。它们都不是特别大,但它们肯定不是微不足道的应用程序,为了保持可读性/完整性,我试图让这两个应用程序在一定程度上分开。我是否正确地组织了我的django应用程序?

我可以将每个应用程序设置为一个子包(这可能是实现这一目标的一种pythonic方式),或者我可以坚持Django的约定,并在每种情况下分别分开功能。

一个Python化“子包”的方法:

package 
|-- __init__.py 
|-- views.py 
|-- models.py  # imports models from both sub-packages 
|-- tests.py  # imports TestCase instances from both sub-packages 
|-- etc.   # shared stuff 
|-- a 
| |-- __init__.py 
| |-- views.py 
| |-- models.py 
| |-- tests.py 
| `-- etc.  # a-specific code 
`-- b 
    |-- __init__.py 
    |-- views.py 
    |-- models.py 
    |-- tests.py 
    `-- etc.  # b-specific code 

或者更直接地安抚神灵的Django:

package 
|-- __init__.py 
|-- views 
| |-- __init__.py 
| |-- a.py 
| `-- b.py 
|-- models 
| |-- __init__.py # imports models from a and b 
| |-- a.py 
| `-- b.py 
|-- tests 
| |-- __init__.py # imports TestCase instances from a and b 
| |-- a.py 
| `-- b.py 
`-- etc. # shared/additional files 

虽然我倾向于前者,此刻瘦(这感觉我的直觉告诉我,虽然两者都工作(并且都涉及导入'hacks'以符合Django的结构),但最好的选择取决于a和b的内容 - 具体来说,代码是多少共享或app-具体。在每个子目录中不断重复__init__.py,a.py,b.py模式并不合适!

我很想知道哪些更适合于处理Python的经验丰富的人!

ps。 我知道他们可以作为两个不同的应用程序生活,但他们如此相互依赖,现在我觉得他们应该合并! (即使除了改进的单个Django应用程序的可移植性)

回答

2

Flat比嵌套更好。

由两个对等应用程序构建的“复合”应用程序很好。它运作良好。

它通过允许这两个组件在更大的应用程序中成为“即插即用”选项来促进重用。

除非你被迫去做,否则不要筑巢。 强制你的窝的头号原因是名称冲突。你没有这个,所以你不需要任何嵌套。

+0

为了提高外行的答案的可读性,你能否清楚哪一个是'扁平'的,哪一个是'嵌套'的,哪一个更好? – thomaspaulb 2013-05-08 15:11:58

+0

Afaik禅宗是指python代码,而不是文件结构,不是吗? – dietbacon 2017-03-15 13:08:23

1

我不是python的专家,但我总是喜欢尽可能多地分离应用程序和其他工件。

我对我自己的django项目采用了blog中描述的方法,它需要对django进行一点调整。迄今为止,它的效果很好。

直接链接到github project

+0

感谢您的链接! – adamnfish 2010-09-01 08:50:38

1

在我的项目,我经常要组织的观点和测试莫名其妙,所以我用的结构是这样的:

package 
|-- __init__.py 
|-- models.py  # models are in one file 
|-- etc.   # shared stuff 
|-- tests 
| |-- __init__.py 
| |-- tests_orders.py 
| |-- tests_clients.py 
| |-- 
| `-- etc. 
|-- views 
| |-- __init__.py 
| |-- orders.py 
| |-- clients.py 
| |-- 
| `-- etc. 

对于有一个文件视图功能,更大的项目是痛苦的(对我来说)。

这是什么适用于我正在工作的一些项目 - 希望有人认为这也有用。