Django设置权限管理

news2024/11/27 7:37:11

目录

整体思路

1.使用django自带的后台功能添加组和用户

        启动django服务后,在Django终端添加一个账号

        在网页上输入网址,跳转到登录页面

        Groups

                新增组,设置组的名字,对应的权限Save即可

        Users

                将用户绑定组或单独设置权限

2.用户的登录绑定

3.用户权限的验证


这篇文章写的比较急,很多地方不够完善,博主会不断更新和完善这篇文章,如有不懂的可以直接评论找博主,博主看到就会回答

整体思路

        1.使用django后台添加用户和权限

        2.用户登录绑定

        3.编写中间件进行访问网页的验证

1.使用django自带的后台功能添加组和用户

        启动django服务后,在Django终端添加一个账号

                python manage.py createsuperuser

                

                按照提示一个一个输入即可

                密码不要设置太简单,这里为了演示就随便设置了

        在网页上输入网址,跳转到登录页面

                http://127.0.0.1:8000/admin/login

                

                这里主要介绍一下两个功能,Groups和Users

                这里简单介绍一下groups和users,user对应的就是每一个账号,grouop对应的一组,一组里面可以包含多个账号,只要给组设置了权限,该组下的所有账号都有对应的权限,也可以为每一个账号设置不同的权限

                

 

        Groups

                新增组,设置组的名字,对应的权限Save即可

                这里演示添加的组名为【group1】,后面会用到

                

 

        Users

                对所有账号进行管理

                

                将用户绑定组或单独设置权限

                已当前账号111为演示,将111账号添加到group1下

                

 

至此通过django后台添加用户和权限就设置完成,但到这只是设置的对应的账号,那如何在页面上实现只有属于该组的才能访问该组的页面的功能呢,下面将介绍代码部分

2.用户的登录绑定

         login(request, user)能够将对应的用户信息给记录,django已经帮我们封装好了,不需要我们再做其他处理,其已经完成这部分功能

from django.shortcuts import render, redirect
from django.utils.timezone import now
from django.contrib.auth import authenticate, login, logout


# 登录页面
def project_login(request):
    if request.method == "GET":
        return render(request, '登录页面的html')
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user)
        return render(request, '登录成功后的html')

    return render(request, '登录页面的html')

3.用户权限的验证

        可以在每个view加一个装饰器,但这样太麻烦,不利于维护,这里就已组来设置权限,只要用户属于对应的组就能访问对应的view,这里使用的方法是添加中间件,使其访问任何网页前都先进行判断,是否满足特定的组

        新建一个py文件,输入下面代码,最后记得在settings.py里面注册中间件,注册中间件的顺序也是有讲究的,不明白的话,自行搜索,为了减少篇幅,这里不过多解释

from django.shortcuts import redirect
from django.urls import reverse


class GroupPermissionMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # 在每个请求之前进行组权限判断
        if not self.check_group_permission(request):
            return redirect(reverse('需要返回的url地址(一般是登录页,自行决定)'))

        response = self.get_response(request)
        return response

    def check_group_permission(self, request):
        # 获取当前请求的用户对象
        user = request.user
        # 获取当前请求的路径
        path = request.path

        # 设置需要进行限制访问的路径列表和对应的组
        restricted_paths = {
            'url存在的路径': '对应的组名',
            # 拿刚才创建的group1来举例
            '/only_group1/': 'group1',

            '/jd/': '对应的组名',
            '/vips/': '对应的组名',
        }

        # 检查用户是否属于指定组,并判断是否允许访问特定页面
        for restricted_path, restricted_group in restricted_paths.items():
            if restricted_path in path and not user.groups.filter(name=restricted_group).exists():
                return False

        return True

        代码解释

        例如我要访问的url是http://127.0.0.1:8000/only_group1/show/group1/data/那就可以在设置成下面的样子,只要有url里面存在 【/only_group1/】就需要【group1】该组的权限,如果该用户不属于group1组那就无法访问

        restricted_paths = {
                    'url存在的路径': '对应的组名',
                   # 拿刚才创建的group1来举例
                    '/only_group1/': 'group1',

                    '/jd/': '对应的组名',
                    '/vips/': '对应的组名',
                }

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/780322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

arm-day2

汇编实现三个灯循环点亮 .text .global _start _start: /**********LED1点灯**************/ RCC_TNIT:ldr r0,0x50000a28ldr r1,[r0]orr r1,r1,#(0x1 << 4)orr r1,r1,#(0x1 << 5)str r1,[r0]LED_TNIT:ldr r0,0x50006000ldr r1,[r0]and r1,r1,#(~(0x3 << 20…

珠海市黄杨山之旅游

西湾村 早上6点半出门&#xff0c;买点五人份的早餐 A点 第一个点&#xff0c;冲 C点 D岛 到d点休息 B点 高度&#xff1a;229米 到这里有人吐了&#xff0c;建议早餐不要吃超过三个包子&#xff08;他吃了四个包子&#xff0c;1个鸡蛋&#xff0c;1个火腿&#xff09; 记…

linux高并发web服务器开发(web服务器)18_函数解析http请求, 正则表达式,sscanf使用,http中数据特殊字符编码解码

pdf详情版 01 学习目标 编写函数解析http请求 ○ GET /hello.html HTTP/1.1\r\n ○ 将上述字符串分为三部分解析出来编写函数根据文件后缀&#xff0c;返回对应的文件类型sscanf - 读取格式化的字符串中的数据 ○ 使用正则表达式拆分 ○ [^ ]的用法通过浏览器请求目录数据 ○…

Window环境RabbitMq搭建部署

Erlang下载安装及配置环境变量 下载erlang&#xff0c;原因在于RabbitMQ服务端代码是使用并发式语言Erlang编写的 Erlang下载 Erlang官网下载&#xff1a; http://www.erlang.org/downloads Erlang国内镜像下载&#xff08;推荐&#xff09;&#xff1a; http://erlang.org/d…

mysql主从复制(主-从-从)

文章目录 一、前期环境准备二、主库配置1.设置server-id值并开启binlog参数2.建立同步账户并给上权限3.查看主库状态4.锁表设置只读5.备份数据库数据 三、从库配置1.设置server-id值并开启binlog参数2.还原从主库备份数据3.设定从主库同步4.启动从库同步开关 四.测试1.在主库上…

力扣 -- 121. 买卖股票的最佳时机

题目&#xff1a; 题目链接&#xff1a;121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 解题步骤&#xff1a; 下面是用动态规划的思想解决这道题的过程&#xff0c;相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。说明&#xff1a;以下这种方法并…

【动态规划part02】| 62.不同路径、63.不同路径||

目录 &#x1f388;LeetCode 62.不同路径 &#x1f388;LeetCode 63. 不同路径 II &#x1f388;LeetCode 62.不同路径 链接&#xff1a;62.不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向…

jQuery基本介绍和 DOM 对象互相转换

文章目录 jQuery基本介绍和 DOM 对象互相转换基本介绍jQuery 的原理示意图JQuery 基本开发步骤说明:jQuery简单示例 jQuery 对象和 DOM 对象什么是 jQuery 对象DOM 对象转成 jQuery 对象应用实例 jQuery 对象转成 DOM 对象代码演示 jQuery基本介绍和 DOM 对象互相转换 基本介绍…

设计模式篇---工厂方法(可通过lambda实现)

文章目录 概念结构实例通过lambda实现总结 概念 工厂方法模式&#xff1a;定义一个用于创建对象的接口&#xff0c;但是让子类决定将哪个类实例化。工厂方法模式让一个类的实例化延迟到其子类。 这个模式还是比较好理解&#xff0c;且使用场景比较频繁。简单工厂是只有一个工厂…

使用 Vue 创建一个简单的 Loading 动画

使用 Vue 创建一个简单的 Loading 动画 1. 开始之前 确保 正确安装了 Vue 3知道如何启动一个新的 Vue 项目&#xff08;或在项目中使用Vue&#xff09;了解 Vue 3 的 Composition API&#xff08;本文将使用&#xff09; 2. 设计组件 该组件应该包含三个部分 控制逻辑旋转…

Centos7:Flask-Apache部署

系列文章目录 RHCE第0章&#xff1a;RHCE开始前的准备 RHCE第1章&#xff1a;Web服务器&#xff08;上&#xff09; RHCE第1章&#xff1a;Web服务器&#xff08;下&#xff09; RHCE第2章&#xff1a;DNS服务 RHCE第3章&#xff1a;DHCP服务器 RHCE第4章&#xff1a;Firewall…

Tensorflow无人车使用移动端的SSD(单发多框检测)来识别物体及Graph的认识

环境是树莓派3B&#xff0c;当然这里安装tensorflow并不是一定要在树莓派环境&#xff0c;只需要是ARM架构就行&#xff0c;也就是目前市场上绝大部分的嵌入式系统都是用这套精简指令集。 在电脑端的检测&#xff0c;有兴趣的可以查阅SSD(Single Shot MultiBox Detector)系列&a…

SpringCloudAlibaba微服务实战系列(四)Sentinel熔断降级、异常fallback、block细致处理

SpringCloudAlibaba Sentinel降级和熔断 接着上篇文章的内容&#xff0c;在Sentinel中如何进行降级和熔断呢&#xff1f; 熔断降级规则 降级规则 在Sentinel中降级主要有三个策略&#xff1a;RT、异常比例、异常数&#xff0c;也是针对某个资源的设置。而在1.8.0版本后RT改为…

python post请求编码问题

在日常的python使用中&#xff0c;必不可少的就是爬虫相关的知识。 爬虫也常会遇到一个问题&#xff0c;即就是编码的问题。 如下&#xff1a; 通过抓包可以看到额&#xff0c;实际python提交的参数为&#xff0c;如下格式&#xff1a; 那这种的签名必不可能通过&#xff0…

FPGA实现串口回环

文章目录 前言一、串行通信1、分类1、同步串行通信2、异步串行通信 2、UART串口通信1、UART通信原理2、串口通信时序图 二、系统设计1、系统框图2.RTL视图 三、源码1、串口发送模块2、接收模块3、串口回环模块4、顶层模块 四、测试效果五、总结六、参考资料 前言 环境&#xff…

【框架篇】Spring Boot核心介绍及项目创建(详细教程)

Spring Boot介绍及项目创建 一&#xff0c;Spring Boot 核心介绍 Spring Boot 是基于 Spring 开发的一种轻量级的全新框架&#xff0c;不仅继承了 Spring 框架原有的优秀特性&#xff0c;而且还通过简化配置来进一步简化了 Spring 应用的整个搭建和开发过程。通过Spring Boot&…

NO.453 最小操作次数使数组元素相等

题目 给你一个长度为 n 的整数数组&#xff0c;每次操作将会使 n - 1 个元素增加 1 。返回让数组所有元素相等的最小操作次数。 思路 本题要求&#xff0c;获取最小操作次数&#xff0c;即在满足所有元素均相等的情况下&#xff0c;操作次数最少。 由于本题无法确定最终元素…

火车头采集器伪原创插件【php源码】

火车头采集是一款基于Python语言开发的网络爬虫工具&#xff0c;用于快速高效地从互联网上采集数据并存储到本地或远程数据库。它简单易用且功能强大&#xff0c;在各行各业广泛应用。 火车头采集器AI伪原创PHP源码&#xff1a; <?php header("Content-type: text/h…

(四)springboot实战——springboot的事件与监听器原理

前言 本节内容是关于springboot的一些核心原理的总结&#xff0c;包括springboot的事件原理、生命周期流程、事件触发流程等核心内容的介绍&#xff0c;从而帮助我们更好的理解与使用springboot&#xff0c;这里只做概念性的内容总结&#xff0c;实战的部分请关注作者后续博客…

数学建模-分类模型 Fisher线性判别分析

论文中1. 判别分析系数 2. 分类结果 多分类问题 勾选内容和上面一样