我的Django应用组织得对吗?

4 投票
3 回答
648 浏览
提问于 2025-04-16 03:32

我现在遇到一个情况,需要把两个Django应用合并成一个可以重复使用的应用。这两个应用都不算特别大,但也不是简单的应用。为了保持代码的可读性和理智,我想尽量把这两个应用分开一些。

我可以把每个应用设置成一个子包(这是一种比较符合Python风格的做法),或者我可以遵循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

目前我倾向于前者(感觉会轻松一些),但我觉得虽然这两种方法都能用(而且都需要一些“技巧”来适应Django的结构),最好的选择还是要看这两个应用的具体内容,特别是它们之间有多少代码是共享的,或者是各自特有的。每个子目录里不断重复__ init__.py、a.py、b.py的模式,感觉不太对劲!

我很想听听有经验的Python开发者的看法,哪种方法更合适!

补充一下,我知道这两个应用可以作为两个独立的应用存在,但它们现在依赖关系很紧密,我觉得应该合并成一个!(更何况合并成一个Django应用会更方便移植)

3 个回答

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.

对于较大的项目,把所有的视图函数放在一个文件里对我来说很麻烦。

这是我正在进行的一些项目中有效的方法——希望对其他人也有帮助。

1

我不是Python方面的专家,但我一直喜欢尽量把应用程序和其他文件分开。

我正在按照这个博客中描述的方法来做我自己的Django项目,这需要对Django进行一些调整。不过到目前为止,这个方法对我来说效果很好。

这是GitHub项目的直接链接。

2

简单的比复杂的好。

一个“组合”的应用程序,由两个平行的应用程序组成,这样的设计是可以的,效果也很好。

而且,这种设计可以促进重用,因为这两个部分可以在更大的应用程序中像插头和插座一样随意连接。

除非真的没办法,否则不要把东西嵌套在一起。让你非得嵌套的主要原因是名字冲突。如果你没有这种情况,那其实就不需要嵌套了。

撰写回答