django的权限6表和 content_type

Posted chanyuli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django的权限6表和 content_type相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

Django 权限取决于模型?

django的contenttype表

测试时图像的 django content_type

django model content_type 使用

Django content_type 简介及其应用

关于django的content_type表