今天的博客主要是记录一下如何实现左侧菜单,这里我们想实现的效果就是,如果用户有查看用户的权限,则显示查看用户的左侧菜单,如果用户有查看角色的权限,则显示查看角色的左侧菜单,如果两者都有,则需要显示两个菜单

我们先来看下model中我们如何设计的数据库

from django.db import models

# Create your models here.

class Userinfo(models.Model):
username = models.CharField(max_length=64)
uerpwd = models.CharField(max_length=64)
roles = models.ManyToManyField(to="Role") def __str__(self):
return self.username
class Meta:
verbose_name = "用户表"
verbose_name_plural = verbose_name class Role(models.Model):
title = models.CharField(max_length=64)
pers = models.ManyToManyField(to="per") def __str__(self):
return self.title
class Meta:
verbose_name="角色表"
verbose_name_plural = verbose_name class per(models.Model):
title = models.CharField(max_length=64)
url = models.CharField(max_length=128)
action = models.CharField(max_length=32, default="")
group = models.ForeignKey("PerGroup", default=1)
def __str__(self):
return self.title
class Meta:
verbose_name = "权限表"
verbose_name_plural = verbose_name class PerGroup(models.Model):
title = models.CharField(max_length=32) def __str__(self): return self.title class Meta:
verbose_name = "权限组"
verbose_name_plural = verbose_name

  

在视图函数中,我们可以在session中拿到per_dict这个数据,下面的数据就是某个用户的per_dict的值

这个数据的内容如下

{'1':

'urls': ['/user/', '/user/add/', '/user/edit/(\\d+)', '/user/del/(\\d+)'],
'action': ['list', 'add', 'edit', 'del']},
'2':
{
'urls': ['/role/add/', '/role/', '/role/del/(\\d+)','/role/edit/(\\d+)'],
'action': ['add', 'list', 'del', 'edit']}}

我们需要拿到action为list的权限,并拿到这个这个权限的titile和url,代码如下

先获取per_group的列表

  group_list = []
for k,v in request.session["per_dict"].items():
if "list" in v["action"]:
group_list.append(k)

  

通过per_group的列表,获取title和url,然后渲染到前端就可以了

    menu_tile = []
print(group_list,"ddddddddddddddddddddddd")
from django.db.models import Q
for i in group_list:
name = rbacmodels.PerGroup.objects.get(id=int(i)).title url = rbacmodels.PerGroup.objects.get(id=int(i)).per_set.filter(Q(action__exact="list")).first().url
temp = [name,url]
menu_tile.append(temp)

  

return render(request,"rbac_roles.html",{"action":action,"role_list":role_list,"menu_tile":menu_tile})

  

最后在html文件中渲染就可以了

<div class="menu">
{% for menu in menu_tile %}
<p class="ment_btn"><a href="{{ menu.1 }}">{{ menu.0 }}</a></p>
{% endfor %}
</div>

  

上面的html这里的代码处理,我们是不是还有更加方便的实现手段,当然有,因为这里其实就是一个html的片段,我们可以用使用inclusion_tags来实现

下面我们就用inclusion_tags来实现

这个函数的意思就是,将函数的返回值,渲染到inclusion_tags中指定的html文件中

我们在看下渲染的html文件

<div class="menu">
{% for menu in menu_tile %}
<p class="ment_btn"><a href="{{ menu.1 }}">{{ menu.0 }}</a></p>
{% endfor %}
</div>

  

最后我们看下调用这个函数的html文件

{% load rbac_tags %}

{% create_rbac_menu  menu_tile %}

  

这里要非常注意,使用inclusion_tags传参不需要"|"来进行传参

Django的Rbac介绍3的更多相关文章

  1. Django的Rbac介绍2

    上一篇博客我们记录了一下Django中使用Rbac,但是上一篇博客中的方法有一点不好,就是,因为我要在html文件中控制:如果用户有某个权限,则显示这个权限所代表的按钮,但是我现在只有1张表的增删改查 ...

  2. Django的Rbac介绍1

    1.django的权限管理叫做RBAC 我们在百度上查看RBAC的概念如下 基于角色的权限访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的 ...

  3. Django - Django框架 简单介绍

    Django框架 简单介绍 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29172271 1. 介绍 Django是一个开放源码 ...

  4. Django项目结构介绍

    官网下载网址:https://www.djangoproject.com/download/ 安装(安装最新LTS版): pip3 install django==2.0.7 创建一个django项目 ...

  5. Django中ORM介绍和字段及字段参数 Object Relational Mapping(ORM)

    Django中ORM介绍和字段及字段参数   Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简 ...

  6. RBAC 介绍 (权限)

    RBAC是什么? RBAC是基于角色的访问控制(Role-Based Access Control )在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限.这就极大地简化了权 ...

  7. Openresty最佳案例 | 第8篇:RBAC介绍、sql和redis模块工具类

    转载请标明出处: http://blog.csdn.net/forezp/article/details/78616738 本文出自方志朋的博客 RBAC介绍 RBAC(Role-Based Acce ...

  8. 6月20日 Django中ORM介绍和字段、字段参数、相关操作

    一.Django中ORM介绍和字段及字段参数 二.Django ORM 常用字段和参数 三.Django ORM执行原生SQL.在Python脚本中调用Django环境.Django终端打印SQL语句 ...

  9. rbac介绍、自动生成接口文档、jwt介绍与快速签发认证、jwt定制返回格式

    今日内容概要 RBAC 自动生成接口文档 jwt介绍与快速使用 jwt定制返回格式 jwt源码分析 内容详细 1.RBAC(重要) # RBAC 是基于角色的访问控制(Role-Based Acces ...

随机推荐

  1. python语言中的数据类型之元组

    数据类型 元组       tuple 元组:不可变类型 用途:元组就是一个不可变的列表,当需要存不改动的值时可用元组 定义方式:在()内用逗号分隔开多个任意类型的元素 t=(1,2.2,'aa',( ...

  2. highstock无图像

    如果你的x轴是时间又是世纪秒的话又按以下设置的话,把xAxis的设置去掉试试看, 因为highstock会对世纪秒自动转换的 // xAxis: {// // max: 23, // min: 0, ...

  3. Oracle 导入大量数据

    环境是这样的: 需要导入大量数据到Oracle,目前Oracle已建立索引和触发器了,导入的数据是树型结构,需要关联. 采用的方法是: 删除以前数据库的索引和触发器,用OracleBulkCopy批量 ...

  4. 案例:Spark基于用户的协同过滤算法

    https://mp.weixin.qq.com/s?__biz=MzA3MDY0NTMxOQ==&mid=2247484291&idx=1&sn=4599b4e31c2190 ...

  5. R语言-画散点图

    plot()函数 plot(cars$dist~cars$speed,           # y~x main="XXX",                            ...

  6. Numpy知识之随机散步实例

    类似于投硬币,简单的随机散步就是在前进一步(+1)和后退一步(-1)之间随机选择. 生成多个随机漫步. 并对多个随机漫步进行简单分析.

  7. 安装 gradle

    Gradle是一种现在很流程的构建工具,目前基本和Maven平分天下,而且大有取而代之的趋势.这篇教程教大家怎么在linux上安装Gradle. 一.获得一台linux服务器 要在linux下安装gi ...

  8. 转载一篇必须超级好的JVM配置实战

    不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM.GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java ...

  9. 2018面向对象程序设计(Java)第6周学习指导及要求

    2018面向对象程序设计(Java) 第6周学习指导及要求(2018.9.29-2018.10.8)   学习目标 深入理解程序设计中算法与程序的关系: 深入理解java程序设计中类与对象的关系: 理 ...

  10. opencv 对RGB图像直接二值化

    #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...