我是否正确组织了我的django应用程序?

时间:2010-08-31 17:35:39

标签: python django structure package

我需要将两个Django应用程序合并到一个可重复使用的应用程序中。两者都不是特别大,但它们肯定不是简单的应用程序,为了保持可读性/理智性,我试图在一定程度上保持两个应用程序分离。

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

Pythonic'子包'方法:

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的内容 - 具体是共享代码的多少或特定于应用程序的代码。在每个子目录中不断重复__ init__.py,a.py,b.py模式是不对的!

我很想知道哪些人更适合处理Python的人!

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

3 个答案:

答案 0 :(得分:2)

Flat比嵌套好。

从两个对等应用程序构建的“复合”应用程序很好。效果很好。

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

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

答案 1 :(得分:1)

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

我正在遵循本blog中针对我自己的django项目所描述的方法,它需要对django进行一些调整。到目前为止,它对我很有帮助。

指向github project

的直接链接

答案 2 :(得分: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.

对于在一个文件中具有视图功能的较大项目来说,这很痛苦(对我而言)。

这适用于我正在进行的一些项目 - 希望有人发现这也很有用。