我需要将两个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应用程序的可移植性之外)
答案 0 :(得分:2)
Flat比嵌套好。
从两个对等应用程序构建的“复合”应用程序很好。效果很好。
它通过允许两个组件在更大的应用程序中成为“即插即用”选项来促进重用。
除非你被迫,否则不要筑巢。 强制嵌套的首要原因是名称冲突。你没有这个,所以你真的不需要任何嵌套。
答案 1 :(得分:1)
我不是python的专家,但我总是喜欢尽可能多地分离应用程序和其他工件。
我正在遵循本blog中针对我自己的django项目所描述的方法,它需要对django进行一些调整。到目前为止,它对我很有帮助。
的直接链接答案 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.
对于在一个文件中具有视图功能的较大项目来说,这很痛苦(对我而言)。
这适用于我正在进行的一些项目 - 希望有人发现这也很有用。