码迷,mamicode.com
首页 > 其他好文 > 详细

django的权限6表和 content_type

时间:2019-12-01 09:48:55      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:出现   label   抽象   直接   djang   多个   操作   不用   mod   

django的权限6表和 content_type

权限6表

我们之前做数据库表迁移的时候都会生成一大堆表,现在可以讲一下其中有些表是干什么的了。

技术图片

先讲一下最开始的3表,有用User表,用来存用户的一大堆属性的,然后角色表,和权限表。每个用户都会有对应的角色,每个角色都有对应的权限,一个用户可以有多个角色,一个角色也可以有多个权限,所以就造成了外键字段有多个值,不符合数据库三大范式的设计。所以引出了6表。

技术图片

第二排的第一张表和第三张表很容易理解,但是中间那张表的意义不太一样,他是直接用户和权限的关系表,因为存在一些用户,他没有角色,但是会有权限,比如说老板的儿子,很明显在角色表里设置一条记录是老板儿子是不可能的,而且老板儿子一定会有很多权限,所以就诞生了这张表。

content_type

# 给Django中的所有模块中的所有表进行编号存储到content_type表中
# 应用一:权限表的权限是操作表的,所有在权限表中有一个content_type表的外键,标识该权限具体操作的是哪张表

理解起来很抽象,所以用一个栗子

现在存在一个课程表,有免费课,学位课,会员课,免费课不用钱,不存在会员。学位课有价格,没有会员。会员课,没有价格,有会员。

"""
Course:
name、type、days、price、vip_type
基础  免费课  7      0
中级  学位课  180    69
究极  会员课  360         至尊会员
"""

这看上去挺正常的,但是如果你的记录多了起来,很可能会出现数十条price字段或者vip_type为空,这显然不符合数据库表的设计。所以把 price 和 vip_type 字段直接删掉,加一个 content_type_id字段。 这个字段的内容是一个新的表 content_type 表里记录的id。

完整版

"""
Course:
name、type、days、content_type_id
基础  免费课  7    null
中级  学位课  180   1
究极  会员课  360   2

app01_course_1
id、price

app01_course_2
id vip_type

content_type表(Django提供)
id、app_label、model
1   app01    course_1
2   app01    course_2
"""

content_type 表里面是对应关系表的,在Course表里的记录如果有价格,就连表course_1,如果有 vip_type 就连表course_2 表。

django的权限6表和 content_type

标签:出现   label   抽象   直接   djang   多个   操作   不用   mod   

原文地址:https://www.cnblogs.com/chanyuli/p/11965096.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!