Django-auth组件

2024-05-26 19:12
文章标签 组件 django auth

本文主要是介绍Django-auth组件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Django-auth组件

1 表结构

我们从python manage.py migrate为我们创建的auth组件内置的表开始看

  • auth_user:用户表存储用户信息(登录admin后台)

    里面的字段分两类:用户基本信息(用户名,邮箱,密码等)和2张M2M表(用户+权限,用户+组)(与权限相关)

  • auth_permission:权限表,存储所有表生成的增删改查的URL(每张表4个路由<——>路由的别名)

  • auth_user_user_permissions:用户表和权限表的多对多关系表,里面放user_idpermission_id

  • auth_group:组表,里面放id和组名,和权限表有多对多的关系(对权限进行分组)

  • auth_user_groups:用户表和组表的关系表,给用户分组

  • auth_group_permissions: 组表和权限表的关系表,给权限分组

2 登录路由

当我们执行python manage.py createsuperuser时,会创建超级用户

我们从超级用户的登录路由来看

在这里插入图片描述

源码嵌套比较多(要重复看),重点在重用和解耦,可实现比较多的自定义

3 首页权限分配

当用户登录成功后,展示的是基于admin注册的表,其中

  • 超级用户全部可见

    在这里插入图片描述

  • 其他用户,只要增删改查4个权限有一个权限被分配,就可以看见

    在这里插入图片描述

我们来看auth源码中是如何控制这种权限的分配

从前面的路由分析中,当我们通过登录成功后,就是执行self.index来展示首页的信息

在这里插入图片描述

总结:

  • 获取所有通过admin注册的Model
  • 根据当前的request.user去数据库校验,判断是否展示

4 按钮控制

auth组件中我们可以控制是否展示add、delete等按钮

上文的分析图中我们可以得到app_list中包含的是获取的具体权限信息

app_list:
[{"name": "App01","app_label": "app01","app_url": "/admin/app01/","has_module_perms": true,"models": [{"model": "<class 'app01.models.Depart'>","name": "Departs","object_name": "Depart","perms": {"add": false,"change": false,"delete": false,"view": true},"admin_url": "/admin/app01/depart/","add_url": "None","view_only": true}]},{"name": "Authentication and Authorization","app_label": "auth","app_url": "/admin/auth/","has_module_perms": true,"models": [{"model": "<class 'django.contrib.auth.models.Group'>","name": "Groups","object_name": "Group","perms": {"add": true,"change": true,"delete": true,"view": true},"admin_url": "/admin/auth/group/","add_url": "/admin/auth/group/add/","view_only": false}]}
]

我们可以通过每个app下每张表的权限true/false来判断是否有权限

具体判断则在每张表的HTML模板中

在这里插入图片描述

这篇关于Django-auth组件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1005345

相关文章

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

基于Qt Qml实现时间轴组件

《基于QtQml实现时间轴组件》时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件,本文主要为大家详细介绍了如何使用Qml实现一个简单的时间轴组件,需要的可以参考下... 目录写在前面效果图组件概述实现细节1. 组件结构2. 属性定义3. 数据模型4. 事件项的添加和排序5. 事件项的渲染如何使用

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

Django中使用SMTP实现邮件发送功能

《Django中使用SMTP实现邮件发送功能》在Django中使用SMTP发送邮件是一个常见的需求,通常用于发送用户注册确认邮件、密码重置邮件等,下面我们来看看如何在Django中配置S... 目录1. 配置 Django 项目以使用 SMTP2. 创建 Django 应用3. 添加应用到项目设置4. 创建

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

vue2 组件通信

props + emits props:用于接收父组件传递给子组件的数据。可以定义期望从父组件接收的数据结构和类型。‘子组件不可更改该数据’emits:用于定义组件可以向父组件发出的事件。这允许父组件监听子组件的事件并作出响应。(比如数据更新) props检查属性 属性名类型描述默认值typeFunction指定 prop 应该是什么类型,如 String, Number, Boolean,

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

利用Django框架快速构建Web应用:从零到上线

随着互联网的发展,Web应用的需求日益增长,而Django作为一个高级的Python Web框架,以其强大的功能和灵活的架构,成为了众多开发者的选择。本文将指导你如何从零开始使用Django框架构建一个简单的Web应用,并将其部署到线上,让世界看到你的作品。 Django简介 Django是由Adrian Holovaty和Simon Willison于2005年开发的一个开源框架,旨在简