首页 > 其他分享 >django中间件(认证+权限)【示例】

django中间件(认证+权限)【示例】

时间:2024-09-06 21:26:34浏览次数:9  
标签:__ name 示例 中间件 request django dict user permissions

from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import redirect, HttpResponse
from django.urls import reverse
from www import models


class AuthMiddleware(MiddlewareMixin):
    def process_request(self, request):
        if request.path_info in [reverse("login")]:
            return

        # {id:'',username:"",is_super:True}
        user_dict = request.session.get("user_session_key")
        if not user_dict:
            return redirect("login")

        request.user_dict = user_dict


class PermissionMiddleware(MiddlewareMixin):

    def process_view(self, request, callback, *args, **kwargs):
        if request.path_info in [reverse("login")]:
            return

        # *超级用户校验
        if request.user_dict['is_super']:
            # 所有菜单都应该展示出来
            menus = models.Menu.objects.all().values("id", "title", "permissions__name", "permissions__code")
            request.menu_list = menus
            return

        # *普通用户校验
        # print("中间件", request.user_dict)
        # 1.获取当前访问的路由
        url_name = request.resolver_match.url_name
        # view_name = request.resolver_match.view_name  api: url_name

        # 2.获取当前用户
        user_object = models.User.objects.filter(id=request.user_dict['id']).first()
        # 获取当用户的所有菜单
        menus = models.Menu.objects.filter(user=user_object).values("id", "title", "permissions__name","permissions__code")
        request.menu_list = menus

        # 当前用户所有的权限
        # role_per_list = user_object.roles.all().values("permissions__name", "permissions__code").distinct()
        role_per_list = user_object.roles.all().values("permissions__name", "permissions__code")
        permission_dict = {item['permissions__code']: item['permissions__name'] for item in role_per_list}
        request.permission_dict = permission_dict
        print("中间件", permission_dict)
        if url_name in permission_dict:
            return

        return HttpResponse("无权访问")

标签:__,name,示例,中间件,request,django,dict,user,permissions
From: https://www.cnblogs.com/cloud-2-jane/p/18401021

相关文章

  • 使用同步锁的代码示例7
    使用同步锁的代码示例packageorg.zyf.javabasic.thread.lock.opti;importjava.util.concurrent.locks.ReentrantLock;/***@program:zyfboot-javabasic*@description:使用了ReentrantLock来保护对共享资源(counter)的访问,确保同一时间只有一个线程可以对计数器......
  • 计算机毕业设计django+vue车辆理赔系统【开题+论文+程序】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着汽车行业的迅猛发展,车辆保险已成为现代社会不可或缺的一部分。然而,传统的车辆理赔流程繁琐、效率低下,且常因信息不对称、处理周期长等......
  • 简单实现限流中间件
    本文由ChatMoney团队出品引言在现代Web应用开发中,限流是一个重要的概念,它能够保护服务器免受流量攻击,确保服务的稳定性和可用性。Go语言以其高性能和并发处理能力在后端服务开发中广受欢迎。Gin是一个使用Go语言编写的Web框架,以其简洁和高效著称。在Gin框架中,通过中间件实现......
  • 实现中间件限流的简单方法
    本文由ChatMoney团队出品引言在现代Web应用开发中,限流是一个重要的概念,它能够保护服务器免受流量攻击,确保服务的稳定性和可用性。Go语言以其高性能和并发处理能力在后端服务开发中广受欢迎。Gin是一个使用Go语言编写的Web框架,以其简洁和高效著称。在Gin框架中,通过中间件实现......
  • 例 2.38 数据写入文件示例
    2.38.1点击查看代码importpandasaspdimportnumpyasnpdates=pd.date_range(start='20191101',end='20191124',freq='D')a1=pd.DataFrame(np.random.randn(24,4),index=dates,columns=list('ABCD'))a2=pd.DataFrame(np.rand......
  • 有关API接口的介绍及简单的API接口代码示例
    在当今数字化时代,应用程序不再孤立存在。它们通过API(应用程序编程接口)相互连接,共享数据和功能。API是现代软件开发中不可或缺的一部分,它允许不同的软件系统相互通信,实现数据的交换和业务逻辑的集成。一、API接口的基本概念API接口是一种预定义的函数或协议,它允许不同的软件应用......
  • Node.js视频活体识别接口集成示例
    在数字时代的浪潮中,信息安全成为了一个不可忽视的议题。随着网络服务的日益普及,从银行金融到社交媒体,各种在线平台都需要确保其用户的身份真实可靠。在需求的推动下,视频活体识别技术应运而生,并迅速发展成为保护网络安全的重要手段。视频活体识别技术是一种通过分析用户的......
  • Rust 操作符及示例
    Rust操作符Rust提供了一系列操作符(operators),每种操作符都有特定的功能和应用场景。1.算术操作符这些操作符用于基本的数学运算:+:加法,用于两个数相加。示例:letsum=5+10;-:减法,用于两个数相减。示例:letdifference=10-5;*:乘法,用于两个数相乘......
  • WebGL入门(031):EXT_frag_depth 简介、使用方法、示例代码
    还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信(gis-dajianshi),一起交流。No.内容链接1Openlayers【入门教程】-......
  • 基于django+vue月知晓彩妆销售系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在当今快节奏与高度个性化的消费市场中,彩妆行业以其丰富多样的产品和不断创新的趋势蓬勃发展。随着消费者对美的追求日益提升,彩妆产品的选......