最近刚刚开始学 Django,不清楚为什么要在一个 Project 里划分 APP。
因为我看 Django 的一个 Project 是一个 Website,而一个 Website 通常来说,是每个功能都要用到同一个数据库的,如果划分成 APP,岂不是要跨 APP 读取 Models 文件了?
1
saulshao 2019-09-16 22:10:35 +08:00
app 实际上是一个包。
这个我觉得和 Java 的包概念有点像。 这么划分更多的是为了方便管理代码。一个大型的系统,功能是非常繁多而且复杂的。 |
3
n37r06u3 2019-09-16 22:29:48 +08:00
django app 主要是划分功能用的,整的结构比较好,可以复用
|
5
arischow 2019-09-16 22:31:39 +08:00 via iPhone
注册登录只是用户里面的功能,如果一定要划分 app,这个 app 应该是 user
|
6
michaelevil 2019-09-16 22:37:50 +08:00
可以给项目做一个顶层分解,分成几个大模块。然后根据这个分 app。
这样也比较好配置 urls.py ,毕竟路径一般都会遵循项目的结构形成树状。 |
7
fyyz OP @arischow 我其实也是这么想的,如果存在跨 models 的情况,拆分太细,稍有不慎就可能会出现 models 循环依赖的问题。
|
8
yuhr123 2019-09-16 23:06:34 +08:00
app 便于功能复用,实现功能之间的高内聚和低耦合。比如你提到的,用户中心(登录、注册等)这个就可以通过创建 users 应用来实现。
|
9
izoabr 2019-09-16 23:14:06 +08:00
或者说 APP 更像是规划用来解决某一项或某一类业务或功能范围的子应用代码的集合包,目的更大的就是楼上前辈们说的那样方便管理,用业务范围来区分。
比如说,我会把订单管理和生产管理分开两个 APP,虽然他们之间会有一些关联,但那样分开的好处就是只要某个功能需要修改,我就知道应该去哪个目录找代码,不然时间长了有时候真记不住。 |
10
fen 2019-09-16 23:22:44 +08:00 via Android
一般来说界限就是业务界限,
多个业务团队开发互不干扰, 业务新增终止不影响其他 app |
11
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。 |
12
a719114136 2019-09-16 23:37:12 +08:00 via Android
一般就是按功能分,本 app 使用本 app 的 model,其他 app 需要使用本 app 的 model 的话写个函数供调用。
至于重复引用,可以靠拆包,提取共用函数解决,不过这会让原来分好的结构又打乱。一般出现重复引用的话在用到的地方 import 就行。 |
13
hellotime 2019-09-17 10:38:37 +08:00
独立的包,结构清晰。
|
14
saulshao 2019-09-17 22:50:00 +08:00
其实谈不上什么界限,完全就是你自己怎么分,不过用户认证和权限这种东西建议独立应用
|
15
Harlaus 2019-09-26 09:04:45 +08:00
社区,用户中心(登录、注册等),一个 app
订单管理,一个 app |