百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

django框架源代码中的自主生成权限表

toyiye 2024-09-16 06:09 4 浏览 0 评论

Django框架是一个用于构建Web应用程序的高级Python Web框架,它自动处理许多Web开发任务,使得开发人员可以更专注于编写Web应用程序的核心逻辑。Django自带一个基于角色的认证和授权系统,称为Django认证系统。这个系统使用车系统中的表来处理用户、组和权限。

django框架中自主生成的auth_group、auth_group_permissions、auth_permission、auth_user、auth_user_groups、auth_user_user_permissions表主要用于实现用户身份验证和权限控制。

其中,auth_user表存储了系统中的所有用户信息,包括用户名、密码、邮箱地址等。auth_user_groups表用于记录用户所属的用户组,一个用户可以属于多个用户组。auth_user_user_permissions表用于记录用户拥有的权限,一个用户可以拥有多个权限。

auth_group表用于记录用户组信息,包括用户组的名称和描述等。一个用户组可以包含多个用户,一个用户也可以属于多个用户组。auth_group_permissions表用于记录用户组拥有的权限,一个用户组可以拥有多个权限。

通过这些表的建立和关联,django框架可以实现对用户的身份验证和权限控制,保障系统的安全性和可靠性。同时,开发人员也可以通过这些表来自定义用户的权限和用户组,以实现更加灵活的权限管理。

以下是Django源代码中与认证系统相关的数据库表及其功能和作用:

  1. auth_user:这个表用于存储与Django认证系统中的用户相关的信息。这包括用户名、密码、电子邮件等。Django使用这个表来存储和检索用户信息,如身份验证和授权。

auth_user表包含以下字段:

  • id:用户的唯一标识符,是自动创建的。
  • username:用户名,必填字段,必须唯一。
  • password:用户密码,必填字段。
  • first_name:用户的名字。
  • last_name:用户的姓氏。
  • email:用户的电子邮件地址,必填字段,必须唯一。
  • is_staff:一个布尔值,指示用户是否可以登录到Django的管理界面。
  • is_active:一个布尔值,指示用户是否激活。
  • date_joined:用户创建的日期和时间。

这些字段的作用和默认格式如下:

  • id:是用户在数据库中的唯一标识符,自动增长。
  • username:是用户登录系统时使用的名称,必须唯一,长度不超过150字符。
  • password:是用户登录系统时使用的密码,必须加密存储,不能明文保存。
  • firstname和lastname:是用户的姓名,可以为空,最大长度为30个字符。
  • email:是用户的电子邮件地址,必须唯一,用于密码重置和系统通知。
  • is_staff:指示用户是否可以登录到Django的管理界面,True表示可以,False表示不可以。
  • is_active:指示用户是否激活,True表示激活,False表示未激活,未激活用户不能登录系统。
  • date_joined:是用户创建的日期和时间,自动添加。

以上是authuser表中默认提供的字段和其作用,可以通过继承AbstractBaseUser和PermissionsMixin自定义用户模型,替换authuser表中默认的字段和方法。

  1. auth_user_groups:这个表是用户和组之间的关联表。它存储每个用户与他们所属的组之间的关系。这个表有助于实现用户角色继承,即一个用户可以成为一个或多个组的成员,从而继承这些组的所有权限。
  • 字段名 类型 描述
  • id int 用户组ID
  • name varchar(80) 用户组名称
  • 其中,id字段是自增的,name字段用于存储用户组的名称。

↑↑↑单独文章说明↑↑↑

  1. auth_group:这个表用于存储与Django认证系统的用户组相关的信息。一个组是一组用户,通常具有相似的权限。通过将用户分配到不同的组,开发人员可以轻松地管理用户的权限。
  • auth_group 是 Django 框架中默认生成的表之一,用于存储用户组信息。该表的字段功能、作用和默认格式如下:
  • id:自增主键,用于唯一标识每个用户组。
  • name:用户组名称,非空且唯一,用于方便管理用户组。
  1. auth_group_permissions:这个表是组和权限之间的关联表。它存储了每个组具有的权限信息。通过这个表,可以轻松地向一个组分配多个权限,而无需为组中的每个用户分别分配权限。
  • auth_group_permissions表是Django框架中默认提供的权限管理系统中的一张表,用于存储用户组与权限关联的信息。
  • 该表的字段如下:
  • id: 自增主键
  • group_id: 外键,关联auth_group表中的id字段,表示该条记录所属的用户组
  • permission_id: 外键,关联auth_permission表中的id字段,表示该条记录所关联的权限
  1. auth_permission:这个表存储了与Django认证系统的权限相关的所有信息。一个权限通常是一个可以执行的操作,例如读取、创建、编辑或删除一个特定的模型对象。该表中的每个权限都与一个具体的模型动作相关联。这样,开发人员可以为用户或组分配对指定模型对象执行特定操作的权限。
  • Django框架中默认表auth_permission是用于存储权限的表,其主要作用是控制用户对不同资源的访问和操作权限。该表包含以下字段:
  • id: 权限编号,自动生成的主键。
  • name: 权限名称,用于标识该权限的名称。例如,可以创建名为“Can add blog”、“Can change blog”、“Can delete blog”的权限。
  • contenttypeid: 外键,关联djangocontenttype表中的id字段,表示该权限所属的资源类型。例如,可以创建名为“Can add blog”、“Can add comment”、“Can add tag”的权限,其中“Can add blog”和“Can add comment”所属的资源类型为Blog,而“Can add tag”所属的资源类型为Tag。
  • codename: 权限代码名称,用于在代码中引用该权限。它由资源类型的applabel和权限名称name组成,中间用下划线连接。例如,上述“Can add blog”权限的codename为“addblog”。
  • 举例说明:假设我们的项目中有一个Blog模型,我们需要为Blog模型创建一个“Can add blog”权限,控制用户是否能够添加博客。我们可以通过如下代码创建该权限:

在Blog模型所在的app的permissions.py文件中添加如下代码:

from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
blog_content_type = ContentType.objects.get_for_model(Blog)
blog_permissions = Permission.objects.filter(content_type=blog_content_type)
add_blog_permission, created = Permission.objects.get_or_create(
codename='add_blog',
name='Can add blog',
content_type=blog_content_type,
)
在settings.py文件中添加如下代码:
INSTALLED_APPS = [
# ...
'myapp',
]
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
]
MIDDLEWARE = [
# ...
'django.contrib.auth.middleware.AuthenticationMiddleware',
]
AUTH_USER_MODEL = 'myapp.User'
AUTHORIZATION_URLS = [
path('admin/', admin.site.urls),
# ...
]

这样,我们就创建了一个“Can add blog”权限,并将其与Blog模型关联起来。在代码中,我们可以通过Permission.objects.get(codename='add_blog')来获取该权限的信息,从而进行相关操作。同时,在Django的admin后台中,我们也能够看到该权限的存在,并能够对其进行管理。

  1. auth_user_user_permissions: 这个表是用户和权限之间的关联Django 是一个广泛使用的 Python Web 框架,其内置的 django.contrib.auth 应用提供了一套完整的身份验证和授权系统。

在 Django 框架中,authuseruser_permissions 是一个默认的权限表,用于存储用户的权限信息。该表包含以下字段:

  • id:自增主键。
  • userid:外键,关联到 authuser 表的 id 字段,用于表示该权限属于哪个用户。
  • permissionid:外键,关联到 authpermission 表的 id 字段,用于表示该权限具体是哪个权限。

通过 auth_user_user_permissions 表,我们可以为不同的用户分配不同的权限,从而控制用户在系统中的操作权限。例如,我们可以为管理员用户分配可以管理用户的权限,而为普通用户分配仅能查看和编辑自己信息的权限。同时,Django 还提供了方便的权限管理工具,可以帮助我们快速地为不同的用户分配不同的权限。

---------------再次说明--------------

auth_group表用于存储用户组信息,包括组名和组权限等。

auth_group_permissions表用于存储用户组的权限信息,即用户组可以访问哪些资源。

auth_permission表用于存储系统的权限信息,即系统中所有的资源和操作。

auth_user表用于存储用户信息,包括用户名、密码等。

auth_user_groups表用于存储用户所属的用户组信息。

auth_user_user_permissions表用于存储用户权限信息,即用户可以访问哪些资源。

下面是示例代码:

from django.contrib.auth.models import User, Group, Permission
# 创建用户组
group = Group.objects.create(name='test_group')
# 给用户组添加权限(假设有一个名为'can_view_test'的权限)
permission = Permission.objects.get(codename='can_view_test')
group.permissions.add(permission)
# 创建用户并将其加入用户组
user = User.objects.create_user('test_user', password='123456')
user.groups.add(group)
# 给用户添加权限
user.user_permissions.add(permission)

使用以上代码,可以创建一个名为test_user的用户,并将其加入一个名为test_group的用户组,同时分配can_view_test权限给用户组和用户。

在 Django 框架中,这几张表格都是与用户认证、权限控制相关的表格。具体的功能与作用如下:

1.auth_group 表格:用于存储用户组信息,每个用户可以属于多个用户组。这个表格的实现可以参考 django.contrib.auth.models.Group 类。

2.auth_group_permissions 表格:用于存储用户组权限信息,即每个用户组可以拥有哪些权限。这个表格的实现可以参考 django.contrib.auth.models.Group 类中的 permissions 属性。

3.auth_permission 表格:用于存储权限信息,每个权限都有一个唯一的标识符和对应的名称。这个表格的实现可以参考 django.contrib.auth.models.Permission 类。

4.auth_user 表格:用于存储用户信息,每个用户都有一个唯一的用户名和密码。这个表格的实现可以参考 django.contrib.auth.models.User 类。

5.auth_user_groups 表格:用于表示每个用户属于哪些用户组。这个表格的实现可以参考 django.contrib.auth.models.User 类中的 groups 属性。

6.auth_user_user_permissions 表格:用于表示每个用户拥有哪些权限。这个表格的实现可以参考 django.contrib.auth.models.User 类中的 user_permissions 属性。

这些表格的应用可以帮助我们实现用户认证和权限控制功能。例如,我们可以通过 auth_user 表格来存储用户信息,并通过 auth_group 和 auth_user_groups 表格来管理用户组和用户之间的关系。同时,我们可以通过 auth_permission 表格来定义权限,并通过 auth_group_permissions 和 auth_user_user_permissions 表格来管理用户组和用户的权限。这些表格的应用可以帮助我们实现更加复杂的权限控制功能。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码