从数据库获取数据后,对数据进行清洗

目标:

  数据1,存放至session 中的数据

  数据2,显示至前端的菜单数据

清洗数据:

1.session存放的数据:(menu_leaf_dict)

2.前端菜单数据(rasult)

from app01 import models

# 取用户角色 uname  juese
data = models.Juese.objects.filter(utoj__u__uname='xguo') # 获取当前用户角色的权限 uname_juese quanxian_zsgc
# 数据去重 (.values(字段).distinct()) 排除不必要的数据 .exclude(qz__q__menu__isnull=True)
data2 = models.JtoQtoZ.objects.filter(j__in=data).exclude(qz__q__menu__isnull=True).values('qz__q__qxname','qz__q__url','qz__q__menu').distinct() # 获得菜单数据
data3 = models.Menu.objects.values("id", 'Mname', 'zgl').all() # for i in data2:
# print(i)
# {'qz__q__qxname': '行政管理', 'qz__q__url': '/xingzheng', 'qz__q__menu': 4}
# {'qz__q__qxname': '用户管理', 'qz__q__url': '/yonghu', 'qz__q__menu': 6} # for i in data3:
# print(i) # -------------------------------------------------------------------------------------- # 处理用户角色权限数据
# 格式:
# id list(dict)
# 4 [{'name': '行政管理', 'url': '/xingzheng', 'gid': 4, 'status': True, 'child': []}] menu_leaf_dict = {}
for i in data2:
i = {
'Mname': i['qz__q__qxname'],
'url': i['qz__q__url'],
'gid': i['qz__q__menu'],
'status': True,
'child': []
}
if i['gid'] in menu_leaf_dict:
menu_leaf_dict[i['gid']].append(i)
else:
menu_leaf_dict[i['gid']] = [i, ] # for i,j in menu_leaf_dict.items():
# print(i,j)
# # 4[{'name': '行政管理', 'url': '/xingzheng', 'gid': 4, 'status': True, 'child': []}]
# # 6[{'name': '用户管理', 'url': '/yonghu', 'gid': 6, 'status': True, 'child': []}] # -------------------------------------------------------------------------------------- # 处理菜单数据
# 格式:
# ID dict 形式
# 1 {'id': 1, 'Mname': '菜单1', 'zgl': None, 'child': [], 'status': False}
menu_dict = {}
for i in data3:
i['child'] = []
menu_dict[i['id']] = i
i['status'] = False # for i,j in menu_dict.items():
# print(i,j) # -------------------------------------------------------------------------------------- # 将用户角色权限数据 挂到 菜单数据中,并将被挂的菜单设置为 True
for i, j in menu_leaf_dict.items():
menu_dict[i]['child'] = j
# menu_dict[i]['status'] = True
zgl_id = i
# print(zgl_id)
while zgl_id:
menu_dict[zgl_id]['status'] = True
zgl_id = menu_dict[zgl_id]['zgl'] # for i,j in menu_dict.items():
# print(i, j)
'''
1 {'id': 1, 'Mname': '菜单1', 'zgl': None, 'child': [], 'status': False}
2 {'id': 2, 'Mname': '菜单2', 'zgl': None, 'child': [], 'status': False}
3 {'id': 3, 'Mname': '菜单3', 'zgl': None, 'child': [], 'status': False}
4 {'id': 4, 'Mname': '菜单1.1', 'zgl': 1, 'child': [{'name': '行政管理', 'url': '/xingzheng', 'gid': 4, 'status': True, 'child': []}], 'status': True}
5 {'id': 5, 'Mname': '菜单1.2', 'zgl': 1, 'child': [], 'status': False}
6 {'id': 6, 'Mname': '菜单1.1.1', 'zgl': 4, 'child': [{'name': '用户管理', 'url': '/yonghu', 'gid': 6, 'status': True, 'child': []}], 'status': True}
'''
# -------------------------------------------------------------------------------------- # 前端的菜单数据:
rasult = []
for i in menu_dict.values():
if i['zgl'] == None:
# if i['child'] != []:
rasult.append(i)
else:
menu_dict[i['zgl']]['child'].append(i) # for i in rasult:
# print(i) # --------------------------------------------------------------------------------------

rasult数据 清洗成前端可以显示的数据:

# # 递归函数(为递归显示菜单做准备)
def test(data_list):
response = ''
tpl = '''
<div class = 'item'>
<div class='title'>%s</div>
<div class='content'>%s</div>
</div>
'''
for i in data_list:
if not i['status']:
continue
elif 'url' in i:
response += "<a href='%s'>%s</a>" % (i['url'], i['Mname'])
else:
title = i['Mname']
i2 = test(i['child'])
response += tpl % (title, i2)
return response # 执行函数获取数据,利用递归函数
response = ''
tpl = '''
<div class = 'item'>
<div class='title'>%s</div>
<div class='content'>%s</div>
</div>
''' for i in rasult:
if not i['status']:
continue
title = i['Mname']
co = test(i['child'])
response += tpl % (title, co) # 最终菜单数据为 : response 数据

封装成class:

传递值:

user_data 用户数据
privilege_data 用户权限数据
menue_date 菜单数据

返回值:

return (menu_leaf_dict, response)
注释:return(用户权限的url,菜单显示的html)
class Privilege():

    def __init__(self, user_data, privilege_data, menue_date):
self.data = user_data
self.data2 = privilege_data
self.data3 = menue_date def data_clear(self):
menu_leaf_dict = {}
for i in self.data2:
i = {
'Mname': i['qz__q__qxname'],
'url': i['qz__q__url'],
'gid': i['qz__q__menu'],
'status': True,
'child': []
}
if i['gid'] in menu_leaf_dict:
menu_leaf_dict[i['gid']].append(i)
else:
menu_leaf_dict[i['gid']] = [i, ] menu_dict = {}
for i in self.data3:
i['child'] = []
menu_dict[i['id']] = i
i['status'] = False # 将用户角色权限数据 挂到 菜单数据中,并将被挂的菜单设置为 True
for i, j in menu_leaf_dict.items():
menu_dict[i]['child'] = j
menu_dict[i]['status'] = True
zgl_id = i
while zgl_id:
menu_dict[zgl_id]['status'] = True
zgl_id = menu_dict[zgl_id]['zgl'] rasult = []
for i in menu_dict.values():
if i['zgl'] == None:
rasult.append(i)
else:
menu_dict[i['zgl']]['child'].append(i) # # 递归函数
def test(data_list):
response = ''
tpl = '''
<div class = 'item'>
<div class='title'>%s</div>
<div class='content'>%s</div>
</div>
'''
for i in data_list:
if not i['status']:
continue
elif 'url' in i:
response += "<a href='%s'>%s</a>" % (i['url'], i['Mname'])
else:
title = i['Mname']
i2 = test(i['child'])
response += tpl % (title, i2)
return response # 执行函数获取数据
response = ''
tpl = '''
<div class = 'item'>
<div class='title'>%s</div>
<div class='content'>%s</div>
</div>
''' for i in rasult:
if not i['status']:
continue
title = i['Mname']
co = test(i['child'])
response += tpl % (title, co) return (menu_leaf_dict, response)

在views中应用:

from django.shortcuts import render,HttpResponse
from app01 import models
from static.privilage import Privilege # Create your views here. def index(requset):
# 取用户角色 uname juese
data = models.Juese.objects.filter(utoj__u__uname='xmei')
# 获取当前用户角色的权限 uname_juese quanxian_zsgc
# 数据去重 (.values(字段).distinct()) 排除不必要的数据 .exclude(qz__q__menu__isnull=True)
data2 = models.JtoQtoZ.objects.filter(j__in=data).exclude(qz__q__menu__isnull=True).values('qz__q__qxname', 'qz__q__url','qz__q__menu').distinct()
# 获得菜单数据
data3 = models.Menu.objects.values("id", 'Mname', 'zgl').all() test = Privilege(data,data2,data3)
a,b = test.data_clear() return render(requset, 'index.html', {'re': b})

Django学习手册 - 权限管理(二)的更多相关文章

  1. Django学习手册 - 权限管理(一)

    权限管理原理: 不同角色拥有不同的角色权限,所以能否访问的页面也就不相同. 通过控制URL使用户访问到不同的URL,从而达到权限控制的目的. 设计权限数据库 权限管理 from django.db i ...

  2. 转:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权

    原文地址:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法.shiro认证与shiro授权 以下是部分内容,具体见原文. shiro介绍 什么是shiro shiro是Apache ...

  3. 《Python学习手册》(二)

    <Python学习手册>(二) --类型和运算 数字 十六进制 八进制 二进制 0x 0o 0b hex() oct() bin() >>>int('10',2) 2 & ...

  4. 十二、基于Django实现RBAC权限管理

    一.RBAC概述 RBAC(Role-Based Access Control,基于角色的访问控制),通过角色绑定权限,然后给用户划分角色. 从企业的角度来说,基本上是按照角色来划分职能.比如,CEO ...

  5. SQL Server与Oracle对比学习:权限管理(二) 一些有趣的比喻

    http://blog.csdn.net/weiwenhp/article/details/8094739 目录(?)[-] SQL Server权限管理 login 与user的区别 角色role ...

  6. django 用户与权限管理

    django中使用content_type表进行存储app与model的关系.在permission表中设立了name(权限的名字,中英文均可)content_type_id(与content_typ ...

  7. MongoDB学习笔记—权限管理

    1.MongoDB权限介绍 a 上篇文章中,我们在Linux下配置了MongoDB环境并且将其设置为服务随机器启动而启动,那么接下来这篇文章我们就来简单说一下MongoDB下对登录用户权限的管理. b ...

  8. [转]Oracle学习笔记——权限管理

    本文转自:http://www.cnblogs.com/whgw/archive/2011/10/30.html 一.系统的默认用户 1)sys用户是超级用户,具有最高权限,具有sysdba角色,有c ...

  9. Django实现Rbac权限管理

    权限管理 权限管理是根据不同的用户有相应的权限功能,通常用到的权限管理理念Rbac. Rbac 基于角色的权限访问控制(Role-Based Access Control)作为传统访问控制(自主访问, ...

随机推荐

  1. 老项目用webpack中文乱码问题解决记录

    有个很久(有多久呢,你还记得jquery1.6的年代吗...)的项目需要新加一些功能,又想使用新的生产力工具比如说webpack,es6,vue神马的.原来的项目整体都是用GBK编码的,这特么...坑 ...

  2. (贪心 线段不相交问题)codeVs 1214 线段覆盖

    题目描述 Description 给定x轴上的N(0<N<100)条线段,每个线段由它的二个端点a_I和b_I确定,I=1,2,……N.这些坐标都是区间(-999,999)的整数.有些线段 ...

  3. python自动化开发-[第十三天]-javascript

    今日概要 1.javascript简单语法 1.javascript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名S ...

  4. Java lombok插件介绍

    lombok是什么? lombok是一个插件,用途是给你类里面的字段,自动的加上属性,构造器,ToString方法,Equals方法等等 lombok怎么安装? 安装网上一搜一大把,这里有一个Idea ...

  5. Ubuntu调节屏幕亮度

    下面的方式支持双屏,最多支持四个屏幕调节亮度. sudo add-apt-repository ppa:apandada1/brightness-controller sudo apt-get upd ...

  6. Dubbo优雅关机原理

    Dubbo是通过JDK的ShutdownHook来完成优雅停机的 所以如果用户使用 kill -9 PID 等强制关闭命令,是不会执行优雅停机的 只有通过 kill PID时,才会执行 原理: · 服 ...

  7. 【leetcode-101】 对称二叉树

    101. 对称二叉树 (1过) 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [ ...

  8. zookeeper的安装与使用

    zookeeper的安装与使用: Zookeeper简介 1.可以作为集群的管理工具使用. 2.可以集中管理配置文件. Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理.命名.分布式 ...

  9. 01-Unity深入浅出(一)

    一. 温故而知新 在开始学习Unity框架之前,有必要温习一下 [依赖倒置原则]和[手写IOC], 因为我们框架代码的构建都是基于[依赖倒置原则]的,而Unity框架的核心思想就是IOC和DI,所以有 ...

  10. windows eclipse安装lombok插件

    1.下载lombok.jar,lombok.jar官方下载地址:https://projectlombok.org/download 2.双击下载好的lombak.jar,安装步骤如下: 2-1.关闭 ...