当前位置: 首页 > news >正文

django--权限管理day1

一:导入一个新应用文件夹并进行配置.

1,创建一个新的应用文件夹:取名rbac

django-admin createapp rbac

2,然后要在settings里面apps下面添加rbac

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
    'rbac.apps.RbacConfig'
]
最后一行就是引入Rbac,如果不知道可以看上面一条app01

二.开始创建程序:

开始之前,要确定好我们要写的是一个封装组件,后期可以直接拿出来用.

你打算做成组件,就必须封装好,等以后直接调用就行.

 

1,首先创建url文件,并创建html文件,并在视图函数里面写代码.

def login(request):

    if request.method=='GET':     #创建html文件
        return render(request,'login.html')  
    else:

        name=request.POST.get('name')
        pwd=request.POST.get('pwd')
        user=models.User.objects.get(name=name,password=pwd)  #取出客户端输入的内容对象.

        if not user:  #进行判断
            return redirect('/login/')    #如果匹配不到,就返回login页面.

        else:
            #加上session 路径判断,  吧路径权限放在session里面
            #在外面创建文件夹是因为以后可以再利用

            permission(user,request)   #这是调用其他页面的函数(给session里面加上值,该user的所有权限路径.)

            return redirect('/index/')    
views代码

 

下面代码是上面permission(user,request)的详细代码

这是一个给session加上权限路径的代码,并且是一个可以给后面其他应用调用组件.

 

from django.conf import settings

def permission(user,request):

    #利用user连表查询他的角色,并且利用角色查到该角色的权限路径,并最后在去重
    all_permission=user.role.values('permission__url').distinct()
    
    #再把结果添加到settings文件里面去,
    request.session[settings.PERMISSION_URLS]=[
url['permission__url'] for url in all_permission]
permission

 

 

 

 

2,配置中间件,为后面做准备

第一,要给login和admin等不需要权限命令的页面,做一个中间件,让login和admin页面可以直接用过.

1,中间件必须要继承类
class MiddlewareMixin(object):
    def __init__(self, get_response=None):
        self.get_response = get_response
        super(MiddlewareMixin, self).__init__()

    def __call__(self, request):
        response = None
        if hasattr(self, 'process_request'):
            response = self.process_request(request)
        if not response:
            response = self.get_response(request)
        if hasattr(self, 'process_response'):
            response = self.process_response(request, response)
        return response
每一个版本的,中间件类不一定是一样的.自己注意
中间件继承的类

 

在中间件类下面,自己定义类,继承上面的类.

这里要注意配置中间件的格式,

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'rbac.middleware.PermissionMiddleware',
    # 文件夹 ---中间件文件--中间件的类
]
这里是根据的是路径分配,以manage.py文件为起点.
中间件格式

 

 

import re
class permission(MiddlewareMixin): #继承上面的类
    
    def process_request(self,request):

        request_url=request.path_info
        for url in settings.MYINFO:
            if re.match(url,request_url):
                return None        
    
       per_url =request.session.get(settings.PERMISSION_URLS)
       if not per_url:     #如果里面没有session
           return redirest('/login/')
       tag=False
       for new_url in per_url:   #把里面所有的权限路径拿出来遍历
            if re.match(new_url,request_url):   #如果匹配到了
                 tag=True                             
                 break           #这里不用return是因为,项目可能不止这些中间件,如果return的话,后面所有的中间件就不执行.
            if not tag:
                 return redirest('/login/') 因为没有匹配到,就直接返回



   
中间件-判断路径以及权限

 

转载于:https://www.cnblogs.com/52forjie/p/7801370.html

相关文章:

  • Alpha 冲刺 (7/10)
  • 找零问题
  • 自动化java+webdriver常用的一些脚本
  • 一些 Ubuntu 使用的小技巧
  • java 单点登录机制
  • 最长上升子序列nlogn算法
  • JAVA配置环境
  • C# 后台模拟请求一般处理程序
  • Windows平台,Oracle Database和Client并存方式
  • tomcat乱码问题1 (
  • Mysql集群讲解(五) 多主多从环境搭建
  • Oracle导出数据中的prompt,set feedback 等是什么意思
  • 【朝花夕拾】朝花夕拾-Robot Framework实战演练之开篇
  • hdu6242 计算几何
  • 查看iis对应w3wp.exe显示的进程ID号
  • CentOS从零开始部署Nodejs项目
  • exports和module.exports
  • JavaScript标准库系列——Math对象和Date对象(二)
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • MD5加密原理解析及OC版原理实现
  • python_bomb----数据类型总结
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Sublime text 3 3103 注册码
  • ViewService——一种保证客户端与服务端同步的方法
  • webgl (原生)基础入门指南【一】
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 从零搭建Koa2 Server
  • 工作手记之html2canvas使用概述
  • 欢迎参加第二届中国游戏开发者大会
  • 缓存与缓冲
  • 前端
  • 如何优雅地使用 Sublime Text
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 我这样减少了26.5M Java内存!
  • 携程小程序初体验
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 正则表达式-基础知识Review
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • $refs 、$nextTic、动态组件、name的使用
  • (11)MSP430F5529 定时器B
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (转)EXC_BREAKPOINT僵尸错误
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • ***通过什么方式***网吧
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET CLR基本术语
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .Net Web窗口页属性
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [20180129]bash显示path环境变量.txt