Django 中 APP 之间的界限是什么?

2019-09-16 21:48:48 +08:00
 fyyz

最近刚刚开始学 Django,不清楚为什么要在一个 Project 里划分 APP。

因为我看 Django 的一个 Project 是一个 Website,而一个 Website 通常来说,是每个功能都要用到同一个数据库的,如果划分成 APP,岂不是要跨 APP 读取 Models 文件了?

4392 次点击
所在节点    Python
15 条回复
saulshao
2019-09-16 22:10:35 +08:00
app 实际上是一个包。
这个我觉得和 Java 的包概念有点像。
这么划分更多的是为了方便管理代码。一个大型的系统,功能是非常繁多而且复杂的。
fyyz
2019-09-16 22:26:45 +08:00
@saulshao 我现在做个论坛,注册 /登录功能需要做成 APP 吗
n37r06u3
2019-09-16 22:29:48 +08:00
django app 主要是划分功能用的,整的结构比较好,可以复用
arischow
2019-09-16 22:30:01 +08:00
@fyyz 不要多想,起码暂时都放一个 app (以我做个人和公司项目的经验)
arischow
2019-09-16 22:31:39 +08:00
注册登录只是用户里面的功能,如果一定要划分 app,这个 app 应该是 user
michaelevil
2019-09-16 22:37:50 +08:00
可以给项目做一个顶层分解,分成几个大模块。然后根据这个分 app。
这样也比较好配置 urls.py ,毕竟路径一般都会遵循项目的结构形成树状。
fyyz
2019-09-16 22:56:15 +08:00
@arischow 我其实也是这么想的,如果存在跨 models 的情况,拆分太细,稍有不慎就可能会出现 models 循环依赖的问题。
yuhr123
2019-09-16 23:06:34 +08:00
app 便于功能复用,实现功能之间的高内聚和低耦合。比如你提到的,用户中心(登录、注册等)这个就可以通过创建 users 应用来实现。
izoabr
2019-09-16 23:14:06 +08:00
或者说 APP 更像是规划用来解决某一项或某一类业务或功能范围的子应用代码的集合包,目的更大的就是楼上前辈们说的那样方便管理,用业务范围来区分。
比如说,我会把订单管理和生产管理分开两个 APP,虽然他们之间会有一些关联,但那样分开的好处就是只要某个功能需要修改,我就知道应该去哪个目录找代码,不然时间长了有时候真记不住。
fen
2019-09-16 23:22:44 +08:00
一般来说界限就是业务界限,
多个业务团队开发互不干扰,
业务新增终止不影响其他 app
freakxx
2019-09-16 23:24:54 +08:00
对于 django 来说,有一个很重要的东西叫,reusable。

app 的划分标准来说,也可以说是按照这个标准去做。

----

所以你可以有一个叫 auth 的 app 来包含 user,perms 和 groups。

也可以单独各自写 user,perms 和 groups。

----

> 因为我看 Django 的一个 Project 是一个 Website,而一个 Website 通常来说,是每个功能都要用到同一个数据库的,如果划分成 APP,岂不是要跨 APP 读取 Models 文件了?

这种情况,其实一个业务 app 就够了,如果你的业务不复杂的话。

如果再复杂一些,你可以建个 file app 专门做文件管理;
再做文章和活动的 app 单独管理不同的业务;

最后通过 user 来勾连起来不同的 model,如果有需要的话。

然后通过 config 的 urls 来勾连不同 app 的 url。
a719114136
2019-09-16 23:37:12 +08:00
一般就是按功能分,本 app 使用本 app 的 model,其他 app 需要使用本 app 的 model 的话写个函数供调用。

至于重复引用,可以靠拆包,提取共用函数解决,不过这会让原来分好的结构又打乱。一般出现重复引用的话在用到的地方 import 就行。
hellotime
2019-09-17 10:38:37 +08:00
独立的包,结构清晰。
saulshao
2019-09-17 22:50:00 +08:00
其实谈不上什么界限,完全就是你自己怎么分,不过用户认证和权限这种东西建议独立应用
Harlaus
2019-09-26 09:04:45 +08:00
社区,用户中心(登录、注册等),一个 app
订单管理,一个 app

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/601307

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX