【发布时间】:2018-02-16 17:17:26
【问题描述】:
注意:我不是一个正统 python 程序员...但我广泛使用 python。我会做一些事情,比如编写带有继承的类、使用迭代器和理解等。我的观点是我对语言没有完整的掌握,例如什么确切构成了一个python对象,为什么除了指定一个模块之外还需要__init__.py等等。关于Django,我已经编写了多应用程序站点(在S.O.的帮助下)并且有真的很喜欢 Django 的模板系统、块以及它们是如何嵌套的。现在我的应用程序完全解耦和可重用了吗?这是这篇文章的主题。
我声明这个免责声明是因为很多 Django 资源似乎都假设人们知道这些事情。这有助于理解一些文档和 S.O.对于一个只是(次级)用户的人来说,问题很困难。因此,请记住这一点来回答这个问题。
问题
这些问题的灵感来自@håkan 的问题When to create a new app with startapp in django? 和@antti rasinen 给出的answer,链接到James Bennett 2008 年的PyCon presentation
Bennett 演讲的几个关键点是:
- 网站是应用的集合
- 一个应用做一件事,做好一件事
这将我引向他的“项目耦合扼杀重用”部分,其中提到:
- 直接在 Python 路径上的单个模块(注册、标记等)
- 包下的相关模块(ellington.events、ellington.podcasts 等)
问题 0
在这种情况下,“模块”只是由其他应用组成的应用?
问题 1
(具有相关功能和共享模型的应用程序)
应用共享模型时应该怎么做?
在 Barrett 的幻灯片中,他暗示用户注册和用户配置文件是不同的,应该是不同的应用程序。 (他当然表示个人资料与用户注册无关)。
所以如果我想要两者,我的项目是否会有两个应用程序,例如:
- 用户注册
- 用户配置文件
即使应用程序user-profile 需要来自user-registration 的用户模型?还是我做一个应用(module):
- 用户应用
- 注册
- 个人资料
两者都包含?
问题 2
(具有不同功能但共享模型的应用程序)
扩展问题 1 中的示例,假设我的主应用(或主应用使用的其他应用)利用了用户模型的某些方面(例如,如果它是聊天网站,则为最近活跃的成员)。
显然,我的主应用程序从用户模型中获取了这些信息。我的主应用现在是否捆绑在 user-app 模块下?
这可能不是最好的例子,但要点如下:
我有两个应用程序app-dependency 和app-needs-dependency,每个应用程序都做它的一件事和一件事……只是app-needs-dependency 需要来自app-dependency 的信息。在这种情况下我该怎么办,如果关于app-needs-dependency 的其他所有内容都 与app-dependency 完全解耦(因此它可以用于其他项目)?
问题 3
(为灵活性编写应用程序)
现在我的网站上有几个应用程序。每个应用程序都只做一件事并且做得很好。在这种情况下,主应用程序用作登录页面/概览。
我希望我的所有其他应用使用/继承主应用的静态和模板文件。
我在哪里存储所有静态文件和模板?在主应用程序中并将其设置为其他应用程序的默认设置?或者这些静态文件/模板(例如base.css、base.html)应该去哪里?
我是否为每个其他应用制作了这些文件的副本,以便即使这是多余的也可以运行它们?
哪一点让我的应用更灵活?
【问题讨论】: