菜单包括菜单列表,菜单列表不仅将菜单列出来,而且将每个菜单下的权限也列出来、菜单的添加、删除、修改。

urls.py

...

    re_path(r'^menus/list/$', MenuView.as_view(), name='menus_list'),
re_path(r'^menus/add/$', MenuAddView.as_view(), name='menus_add'),
re_path(r'^menus/edit/(?P<mid>\d+)/$', MenuEditView.as_view(), name='menus_edit'),
re_path(r'^menus/dell/(?P<mid>\d+)/$', MenuDelView.as_view(), name='menus_del'), ...

1、后台处理菜单列表页

class MenuView(View):
def get(self,request):
menu_queryset=Menu.objects.all() pid=request.GET.get('pid') if pid:
root_permission_queryset = Permission.objects.filter(menu_id=pid).values('id', 'title', 'url', 'name', 'parent_id','menu__title')
else:
root_permission_queryset = Permission.objects.filter(menu_id__isnull=False).values('id', 'title', 'url', 'name', 'parent_id','menu__title')
# print('permission_queryset',root_permission_queryset) all_root_permission_queryset=Permission.objects.all().values('id', 'title', 'url', 'name', 'parent_id')
root_permission_dict={}
for row in root_permission_queryset:
if not row['parent_id']:
root_permission_dict[row['id']]={
'id':row['id'],
'title':row['title'],
'name':row['name'],
'url':row['url'],
'menu_title':row['menu__title'],
'children':[]
}
for row in all_root_permission_queryset:
parent_id=row['parent_id']
if parent_id in root_permission_dict:
root_permission_dict[parent_id]['children'].append(
{
'id':row['id'],
'title':row['title'],
'name':row['name'],
'url':row['url']
}
)
print(root_permission_dict) return render(request,'rbac/menu_list.html',{'menu_queryset':menu_queryset,
'root_permission_dict':root_permission_dict,
'pid':pid })

将每一个菜单及其权限取出来,组成相应的数据结构

{
64: {
'id': 64,
'name': 'rbac:multi_permissions',
'menu_title': '权限管理',
'title': '批量添加权限',
'children': [],
'url': '/rbac/multi/permissions/'
},
1: {
'id': 1,
'name': 'stark:crm_userinfo_changelist',
'menu_title': '权限管理',
'title': '用户列表',
'children': [{
'id': 2,
'name': 'stark:crm_userinfo_add',
'title': '添加用户',
'url': '/stark/crm/userinfo/add/'
}, {
'id': 3,
'name': 'stark:crm_userinfo_change',
'title': '修改用户',
'url': '/stark/crm/userinfo/(?P<pk>\\d+)/change/'
}, {
'id': 4,
'name': 'stark:crm_userinfo_del',
'title': '删除用户',
'url': '/stark/crm/userinfo/(?P<pk>\\d+)/del/'
}, {
'id': 78,
'name': 'stark:crm_userinfo_reset_pwd',
'title': '重置密码',
'url': '/stark/crm/userinfo/reset/password/(?P<pk>\\d+)/'
}],
'url': '/stark/crm/userinfo/list/'
},
66: {
'id': 66,
'name': 'login',
'menu_title': '其它',
'title': '登陆',
'children': [],
'url': '/login/'
},
99: {
'id': 99,
'name': 'stark:crm_order_customer_order',
'menu_title': '客户管理',
'title': '个人订单列表',
'children': [{
'id': 100,
'name': 'stark:crm_paymentrecord_changelist',
'title': '个人账单列表',
'url': '/stark/crm/paymentrecord/list/(?P<order_id>\\d+)/'
}, {
'id': 102,
'name': 'stark:crm_paymentrecord_change',
'title': '修改个人账单',
'url': '/stark/crm/paymentrecord/(?P<order_id>\\d+)/(?P<pk>\\d+)/change/'
}, {
'id': 103,
'name': 'stark:crm_paymentrecord_del',
'title': '删除个人账单',
'url': '/stark/crm/paymentrecord/(?P<order_id>\\d+)/(?P<pk>\\d+)/del/'
}, {
'id': 105,
'name': 'stark:crm_paymentrecord_add',
'title': '添加个人账单',
'url': '/stark/crm/paymentrecord/add/(?P<order_id>\\d+)/'
}],
'url': '/stark/crm/order/customer/order/list/'
},
37: {
'id': 37,
'name': 'stark:crm_productparameter_changelist',
'menu_title': '产品管理',
'title': '产品参数列表',
'children': [{
'id': 38,
'name': 'stark:crm_productparameter_add',
'title': '添加产品参数',
'url': '/stark/crm/productparameter/add/'
}, {
'id': 39,
'name': 'stark:crm_productparameter_change',
'title': '修改产品参数',
'url': '/stark/crm/productparameter/(?P<pk>\\d+)/change/'
}, {
'id': 40,
'name': 'stark:crm_productparameter_del',
'title': '删除产品参数',
'url': '/stark/crm/productparameter/(?P<pk>\\d+)/del/'
}],
'url': '/stark/crm/productparameter/list/'
},
65: {
'id': 65,
'name': 'rbac:distribute_permissions',
'menu_title': '权限管理',
'title': '分配权限',
'children': [],
'url': '/rbac/distribute/permissions/'
},
49: {
'id': 49,
'name': 'stark:crm_productaudit_changelist',
'menu_title': '产品管理',
'title': '产品审核列表',
'children': [],
'url': '/stark/crm/productaudit/list/'
},
72: {
'id': 72,
'name': 'index',
'menu_title': '其它',
'title': '主页',
'children': [],
'url': '/index/'
},
9: {
'id': 9,
'name': 'stark:crm_customer_per_changelist',
'menu_title': '客户管理',
'title': '个人客户列表',
'children': [{
'id': 10,
'name': 'stark:crm_customer_per_add',
'title': '个人客户添加',
'url': '/stark/crm/customer/per/add/'
}, {
'id': 11,
'name': 'stark:crm_customer_per_change',
'title': '个人客户修改',
'url': '/stark/crm/customer/per/(?P<pk>\\d+)/change/'
}, {
'id': 12,
'name': 'stark:crm_customer_per_del',
'title': '个人客户删除',
'url': '/stark/crm/customer/per/(?P<pk>\\d+)/del/'
}, {
'id': 84,
'name': 'stark:crm_order_add',
'title': '添加客户订单',
'url': '/stark/crm/order/add/(?P<customer_id>\\d+)/'
}, {
'id': 85,
'name': 'stark:crm_order_change',
'title': '修改客户订单',
'url': '/stark/crm/order/(?P<customer_id>\\d+)/(?P<pk>\\d+)/change/'
}, {
'id': 86,
'name': 'stark:crm_order_del',
'title': '删除客户订单',
'url': '/stark/crm/order/(?P<customer_id>\\d+)/(?P<pk>\\d+)/del/'
}, {
'id': 88,
'name': 'stark:crm_consultantrecord_per_add',
'title': '添加客户咨询记录',
'url': '/stark/crm/consultantrecord/per/add/(?P<customer_id>\\d+)/'
}, {
'id': 89,
'name': 'stark:crm_consultantrecord_per_change',
'title': '修改客户咨询记录',
'url': '/stark/crm/consultantrecord/per/(?P<customer_id>\\d+)/(?P<pk>\\d+)/change/'
}, {
'id': 90,
'name': 'stark:crm_consultantrecord_per_del',
'title': '删除客户咨询记录',
'url': '/stark/crm/consultantrecord/per/(?P<customer_id>\\d+)/(?P<pk>\\d+)/del/'
}, {
'id': 91,
'name': 'stark:crm_consultantrecord_per_changelist',
'title': '客户咨询列表',
'url': '/stark/crm/consultantrecord/per/constant/list/(?P<customer_id>\\d+)/'
}, {
'id': 92,
'name': 'stark:crm_order_changelist',
'title': '客户订单列表',
'url': '/stark/crm/order/customer/order/(?P<customer_id>\\d+)/'
}],
'url': '/stark/crm/customer/per/list/'
},
45: {
'id': 45,
'name': 'stark:crm_workshop_changelist',
'menu_title': '生产流程管理',
'title': '生产车间列表',
'children': [{
'id': 46,
'name': 'stark:crm_workshop_add',
'title': '添加生产车间',
'url': '/stark/crm/workshop/add/'
}, {
'id': 47,
'name': 'stark:crm_workshop_change',
'title': '修改生产车间',
'url': '/stark/crm/workshop/(?P<pk>\\d+)/change/'
}, {
'id': 48,
'name': 'stark:crm_workshop_del',
'title': '删除生产车间',
'url': '/stark/crm/workshop/(?P<pk>\\d+)/del/'
}],
'url': '/stark/crm/workshop/list/'
},
79: {
'id': 79,
'name': 'stark:crm_paymentrecord_audit_list',
'menu_title': '费用管理',
'title': '账单审核',
'children': [],
'url': '/stark/crm/paymentrecord/audit/'
},
80: {
'id': 80,
'name': 'logout',
'menu_title': '其它',
'title': '登出',
'children': [],
'url': '/logout/'
},
17: {
'id': 17,
'name': 'stark:crm_product_changelist',
'menu_title': '产品管理',
'title': '产品列表',
'children': [{
'id': 18,
'name': 'stark:crm_product_add',
'title': '产品增加',
'url': '/stark/crm/product/add/'
}, {
'id': 19,
'name': 'stark:crm_product_change',
'title': '产品修改',
'url': '/stark/crm/product/(?P<pk>\\d+)/change/'
}, {
'id': 20,
'name': 'stark:crm_product_del',
'title': '产品删除',
'url': '/stark/crm/product/(?P<pk>\\d+)/del/'
}],
'url': '/stark/crm/product/list/'
},
82: {
'id': 82,
'name': 'stark:crm_order_check_order',
'menu_title': '订单管理',
'title': '订单审核',
'children': [],
'url': '/stark/crm/order/check_list/'
},
53: {
'id': 53,
'name': 'rbac:roles_list',
'menu_title': '权限管理',
'title': '角色列表',
'children': [{
'id': 54,
'name': 'rbac:roles_add',
'title': '添加角色',
'url': '/rbac/roles/add/'
}, {
'id': 55,
'name': 'rbac:roles_edit',
'title': '修改角色',
'url': '/rbac/roles/edit/(?P<rid>\\d+)/'
}, {
'id': 56,
'name': 'rbac:roles_del',
'title': '删除角色',
'url': '/rbac/roles/dell/(?P<rid>\\d+)/'
}, {
'id': 60,
'name': 'rbac:menus_del',
'title': '删除菜单',
'url': '/rbac/menus/dell/(?P<mid>\\d+)/'
}],
'url': '/rbac/roles/list/'
},
41: {
'id': 41,
'name': 'stark:crm_procedure_changelist',
'menu_title': '生产流程管理',
'title': '生产流程列表',
'children': [{
'id': 42,
'name': 'stark:crm_procedure_add',
'title': '添加生产流程',
'url': '/stark/crm/procedure/add/'
}, {
'id': 43,
'name': 'stark:crm_procedure_change',
'title': '修改生产流程',
'url': '/stark/crm/procedure/(?P<pk>\\d+)/change/'
}, {
'id': 44,
'name': 'stark:crm_procedure_del',
'title': '删除生产流程',
'url': '/stark/crm/procedure/(?P<pk>\\d+)/del/'
}],
'url': '/stark/crm/procedure/list/'
},
57: {
'id': 57,
'name': 'rbac:menus_list',
'menu_title': '权限管理',
'title': '菜单列表',
'children': [{
'id': 58,
'name': 'rbac:menus_add',
'title': '添加菜单',
'url': '/rbac/menus/add/'
}, {
'id': 59,
'name': 'rbac:menus_edit',
'title': '修改菜单',
'url': '/rbac/menus/edit/(?P<mid>\\d+)/'
}, {
'id': 61,
'name': 'rbac:permissions_add',
'title': '添加权限',
'url': '/rbac/permissions/add/'
}, {
'id': 62,
'name': 'rbac:permissions_edit',
'title': '修改权限',
'url': '/rbac/permissions/edit/(?P<pid>\\d+)/'
}, {
'id': 63,
'name': 'rbac:permissions_del',
'title': '删除权限',
'url': '/rbac/permissions/dell/(?P<pid>\\d+)/'
}],
'url': '/rbac/menus/list/'
},
5: {
'id': 5,
'name': 'stark:crm_department_changelist',
'menu_title': '权限管理',
'title': '部门列表',
'children': [{
'id': 6,
'name': 'stark:crm_department_add',
'title': '添加部门',
'url': '/stark/crm/department/add/'
}, {
'id': 7,
'name': 'stark:crm_department_change',
'title': '修改部门',
'url': '/stark/crm/department/(?P<pk>\\d+)/change/'
}, {
'id': 8,
'name': 'stark:crm_department_del',
'title': '删除部门',
'url': '/stark/crm/department/(?P<pk>\\d+)/del/'
}],
'url': '/stark/crm/department/list/'
}
}

数据格式

2、处理添加菜单

添加以及修改使用的都是modelform

from django import forms
from rbac import models
from django.utils.safestring import mark_safe ICON_LIST = [
['fa fa-address-book', '<i aria-hidden="true" class="fa fa-address-book"></i>'],
['fa fa-address-book-o', '<i aria-hidden="true" class="fa fa-address-book-o"></i>'],
['fa fa-address-card', '<i aria-hidden="true" class="fa fa-address-card"></i>'],
['fa fa-address-card-o', '<i aria-hidden="true" class="fa fa-address-card-o"></i>'],
['fa fa-adjust', '<i aria-hidden="true" class="fa fa-adjust"></i>'],
['fa fa-american-sign-language-interpreting','<i aria-hidden="true" class="fa fa-american-sign-language-interpreting"></i>'],
['fa fa-stack-overflow', '<i class="fa fa-stack-overflow" aria-hidden="true"></i>'],
['fa fa-clipboard', '<i class="fa fa-clipboard"></i>'], ] for item in ICON_LIST:
item[1]=mark_safe(item[1]) class MenuModelForm(forms.ModelForm): class Meta:
model=models.Menu fields=['title','icon']
widgets = {
'title': forms.TextInput(attrs={'placeholder': '请输入菜单名称', 'class': 'form-control'}),
'icon':forms.RadioSelect(choices=ICON_LIST)
}

modelform

class MenuAddView(View):
def get(self,request):
form = MenuModelForm()
return render(request,'rbac/menu_add.html',{'form':form}) def post(self,request):
form=MenuModelForm(data=request.POST)
if form.is_valid():
form.save()
return redirect(reverse('rbac:menus_list'))
return render(request,'rbac/menu_add.html',{'form':form})

3、处理修改菜单

class MenuEditView(View):

    def get(self,request,mid):
menu_obj=Menu.objects.filter(id=mid).first()
if not menu_obj:
return HttpResponse('该菜单不存在')
form=MenuModelForm(instance=menu_obj)
return render(request,'rbac/menu_edit.html',{'form':form}) def post(self,request,mid):
menu_obj=Menu.objects.filter(id=mid).first()
form=MenuModelForm(data=request.POST,instance=menu_obj)
if form.is_valid():
form.save()
return redirect(reverse('rbac:menus_list'))
return render(request, 'rbac/menu_edit.html', {'form': form})

4、处理删除菜单

class MenuDelView(View):

    def  get(self,request,mid):
Menu.objects.filter(id=mid).first().delete()
return redirect(reverse('rbac:menus_list'))

rbac组件之菜单操作(三)的更多相关文章

  1. rbac组件之角色操作(二)

    为了与stark组件分离,形成独立的模块,所以rbac数据表的操作需要单独进行操作,对角色表的操作. urls.py urlpatterns = [ re_path(r'^roles/list/$', ...

  2. rbac组件之权限操作(四)

    对于权限表的操作有两种方式,第一种是一个个的权限进行curd,另外一种是批量操作,自动发现django程序中的路由,进行批量curd,首先介绍第一种方式. 因为在列出菜单时,已经将权限列表列出来了,所 ...

  3. python 全栈开发,Day108(客户管理之权限控制,客户管理之动态"一级"菜单,其他应用使用rbac组件,django static文件的引入方式)

    一.客户管理之权限控制 昨天的作业,有很多不完善的地方 下载代码,基本实现权限验证 https://github.com/987334176/luffy_permission/archive/v1.2 ...

  4. DocX开源WORD操作组件的学习系列三

    DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...

  5. 应用rbac组件 动态生成一级菜单

    动态生成一级菜单 改表结构 需要知道是否是菜单\icon\名称权限表 +字段: is_menu = models.BooleanField(max_length=32,verbose_name='是否 ...

  6. 扫雷游戏制作过程(C#描述):第五节、菜单操作(续)

    前言 这里给出教程原文地址. 该项目已经放在github上托管. 发布版已经分享到百度网盘 菜单操作(续) 接着节前一章节的内容,我们继续完善菜单栏的功能. 我们首先,先完善Rank的选项,我们希望我 ...

  7. 扫雷游戏制作过程(C#描述):第四节、菜单操作

    前言 这里给出教程原文地址. 该项目已经放在github上托管. 菜单操作 我们现在的程序单击菜单的时候不会有任何反应,这一节我们主要介绍菜单的相关代码,使得菜单能够正常使用. 现在我们希望在对应级别 ...

  8. rbac组件

    创建新项目 新建一个项目untitled,注意django 版本为1.11 修改models.py,增加2个表 from django.db import models class Classes(m ...

  9. CRM rbac 组件的应用

    1 拷贝 rbac 组件到项目中,注册这个app 2 数据库迁移 1 删除rbac下migrations里除了init外的文件 2 修改用户表 class User(models.Model): &q ...

随机推荐

  1. [Swift通天遁地]一、超级工具-(4)使用UIWebView(网页视图)加载HTML和Gif动画

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  2. A - I'm bored with life

    Holidays have finished. Thanks to the help of the hacker Leha, Noora managed to enter the university ...

  3. Bootstrap简介及安装使用

    Bootstrap 简介 什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的 ...

  4. C语言之图像旋转

    最近用到了图像向左或者向右旋转90°的情况,纠结了好一会儿,写下来供大家参考. 1 向左旋转90° //unsigned char *pImgData: 输入图像指针 //int WidthIn, i ...

  5. 洛谷 P2634 [国家集训队]聪聪可可

    点分板子2333 注释都是错过的地方 #include<cstdio> #include<algorithm> using namespace std; typedef lon ...

  6. HDFS执行getDatanodeReport输出信息

    HDFS执行getDatanodeReport输出信息: Name: (192.168.101.100) Hostname: bigsrv Decommission Status : Normal C ...

  7. 如何移除EditText自动焦点

    <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_cont ...

  8. 窗口Dialog

    Dialog是窗口的意思,它是Window的子类.与frame相比,frame是我们大的窗口,而dialog便是那种弹出来和你说话的对话框. Dialog类的默认布局是BorderLayout Dia ...

  9. Java数组的交集、并集

    // 求两个数组的交集 public static int[] SameOfTwoArrays(int[] arr1, int[] arr2) { // 新建一个空数组,用于存储交集,空数组长度应该为 ...

  10. openmv第一次调试

    2018-09-19  20:14:51 import sensor, image, time import car import json import time from pyb import U ...