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 表。

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

时间: 2024-07-31 16:07:48

django的权限6表和 content_type的相关文章

Django之权限管理插件

参考:https://www.cnblogs.com/alex3714/articles/6661911.html http://www.cnblogs.com/wupeiqi/articles/6229414.html 1.      什么是权限? 权限就是对软件系统中各种资源的访问和操作的控制! 2.      什么是资源? 在软件系统中,数据库.内存.硬盘里数据都是资源,资源就是数据! 3.      动作 资源本身是静态的,必须通过合适的动作对其进行访问和操作,我们说要控制权限,其实本质

drf三大认证:认证组件-权限组件-权限六表-自定义认证组件的使用

三大认证工作原理简介 源码分析: from rest_framework.views import APIView 源码分析入口: 内部的三大认证方法封装: 三大组件的原理分析: 权限六表分析 基于用户权限访问控制的认证(RBAC):Role-Based-Access-Control;基于auth的认证规则(了解). Django框架采用的是RBAC认证规则:通常分为:三表规则.五表规则.Django采用的是六表规则. 三表:用户表.角色表.权限表 五表:用户表.角色表.权限表.用户角色关系表.

项目准备流程 和 权限六表

一.项目准备 1. 创建django项目 2. 创建数据库 —— init文件中声明mysql —— settings中配置数据库 import pymysql pymysql.install_as_MySQLdb() # 为该项目创建一个数据库 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dg_proj', 'USER': 'root', 'PASSWORD': '123' } } 3. 配

django使用django.db模块创建表

1.创建一个django项目,叫djangodb_demo 2.使用mysql数据库 2.在djangodb_demo项目下面再创建一个叫web的app 3.在web下新建一个models.py的文件 from django.db import models class UserInfo(models.Model):          username = models.CharField(maxlength=50)          password = models.CharField(ma

2.4.3、Django用户权限控制

上面已经实现了登录和注销功能,但是还没起作用. 我们需要在每个视图函数里加上限制@login_required 如下: from django.contrib.auth.decorators import login_required ... ... @login_required def data_daka(request): all = class.objects.all() ... ... login_required实现了如下功能: 如果用户没有登录, 重定向到/accounts/log

# Django admin、form表单的应用记录

目录 Django admin.form表单的应用记录 一 Django admin 1. 使用介绍 form组件使用 1. form的作用 2. form组件生成HTMKL代码 3. form组件校验数据有效性 3. form组件如何给html标签设置默认值 Django admin.form表单的应用记录 一 Django admin 1. 使用介绍 1. 创建超级用户 python manage.py createsuperuser username: wph password: 1231

django继承修改 User表导致的问题

扩展默认的auth_user表参考: http://www.cnblogs.com/liwenzhou/p/9030211.html#undefined django继承修改 User表时,python  manage.py  makemigrations进行python  manage.py  migrate操作时会导致的问题如图: 根源:django文档中有注明: Due to limitations of Django’s dynamic dependency feature for sw

django多对多中间表详解

我们都知道对于ManyToMany字段,Django采用的是第三张中间表的方式.通过这第三张表,来关联ManyToMany的双方.下面我们根据一个具体的例子,详细解说中间表的使用. 一.默认中间表 首先,模型是这样的: class Person(models.Model): name = models.CharField(max_length=128) def __str__(self): return self.name class Group(models.Model): name = mo

Django解决扩展用户表时,后台Admin显示密码为明文的问题

小生博客:http://xsboke.blog.51cto.com 如果有疑问,请点击此处,然后发表评论交流,作者会及时回复(也可以直接在当前文章评论). -------谢谢您的参考,如有疑问,欢迎交流 Django解决当扩展用户表时,用户继承AbstractUser后,后台Admin会显示密码为明文的问题 先看项目列表 1.今天在写一个扩展Django默认的用户表功能时,遇到了一个问题.先给大家看一下我写的,扩展用户表的models[apps.users.models],我是通过继承Abstr