zoukankan      html  css  js  c++  java
  • rbac组件之菜单操作(三)

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

    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'))
  • 相关阅读:
    预备作业2
    我期待的师生关系
    20162317袁逸灏 第四周实验报告
    《程序设计与数据结构》第4周学习总结
    《程序设计与数据结构》第3周学习总结
    20162317 《程序设计与数据结构》第2周学习总结
    学号20162317《程序设计与数据结构》第1周学习总结
    预备作业03
    预备作业02
    20162317袁逸灏
  • 原文地址:https://www.cnblogs.com/shenjianping/p/10960600.html
Copyright © 2011-2022 走看看