首页 > 其他 > 详细

二级菜单

时间:2020-03-22 22:46:53      阅读:61      评论:0      收藏:0      [点我收藏+]
技术分享图片
 1 from django.db import models
 2 
 3 # Create your models here.
 4 class User(models.Model):
 5     name=models.CharField(max_length=11)
 6     pwd=models.CharField(max_length=11)
 7     roles=models.ManyToManyField(Role)
 8     def __str__(self):
 9         return self.name
10 
11 class Role(models.Model):
12     title=models.CharField(max_length=11)
13     permissions=models.ManyToManyField(Permission)
14     def __str__(self):
15         return self.title
16 
17 class Menu(models.Model):
18     title=models.CharField(max_length=32,verbose_name="菜单")
19     icon=models.CharField(max_length=32,verbose_name="图标",null=True,blank=True)
20 
21 class Permission(models.Model):
22     title=models.CharField(max_length=32)
23     url=models.CharField(max_length=32)
24     menu=models.ForeignKey(Menu,on_delete=models.CASCADE,null=True)
25     # icon=models.CharField(max_length=32,default="")
26     def __str__(self):
27         return self.title
表结构
技术分享图片
 1 from app01.models import Role
 2 
 3 def initial_session(user,request):
 4     permissions = Role.objects.filter(user=user).values(permissions__url,
 5                                                         permissions__title,
 6                                                         permissions__menu__title,
 7                                                         permissions__menu__icon,
 8                                                         permissions__menu__pk,
 9                                                         ).distinct()
10     permission_list = []
11     permission_menu_dict = {}
12     for item in permissions:
13         permission_list.append(item[permissions__url])
14         menu_pk = item[permissions__menu__pk]
15         if menu_pk:
16             if menu_pk not in permission_menu_dict:
17                 permission_menu_dict[menu_pk] = {
18                     "menu_title": item[permissions__menu__title],
19                     "menu_icon": item[permissions__menu__icon],
20                     "children": [
21                         {
22                             "title": item[permissions__title],
23                             "url": item[permissions__url],
24                         }
25                     ],
26                 }
27             else:
28                 permission_menu_dict[menu_pk]["children"].append({
29                     "title": item[permissions__title],
30                     "url": item[permissions__url],
31                 })
32     print(permission_menu_dict)
33     request.session[permission_list] = permission_list
34     request.session[permission_menu_dict] = permission_menu_dict
rbac.py
技术分享图片
 1 import re
 2 
 3 from django.template import Library
 4 
 5 register=Library()
 6 @register.inclusion_tag("rbac/menu.html")
 7 def get_menu_style(request):
 8     permission_menu_dict = request.session.get(permission_menu_dict)
 9     for val in permission_menu_dict.values():
10         for item in val["children"]:
11             val["class"] = "active"
12             ret = re.search("^{}$".format(item[url]), request.path)
13             if ret:
14                 val["class"] = ""
15     return {permission_menu_dict:permission_menu_dict}
templatetags/rbac.py
技术分享图片
<div class="multi-menu">
    {% for foo in permission_menu_dict.values %}
        <div class="item">
        <div class="title"><i class="{{ foo.menu_icon }}"></i>{{ foo.menu_title }}</div>
        <div class="body {{ foo.class }}">
            {% for item in foo.children %}
                <a href="{{ item.url }}">{{ item.title }}</a>
            {% endfor %}

        </div>
        </div>
    {% endfor %}
</div>
menu.html
from django.contrib import admin
from app01 import models
# Register your models here.
admin.site.register(models.User)

class RoleConfig(admin.ModelAdmin):
    list_display = [title]

admin.site.register(models.Role,RoleConfig)

class PermissionConfig(admin.ModelAdmin):
    list_display = [pk,title,url,menu]
    # list_editable = [‘title‘,‘is_menu‘]
    search_fields = [title]
    ordering = [pk]

admin.site.register(models.Permission,PermissionConfig)

 

二级菜单

原文:https://www.cnblogs.com/xuqidong/p/12548777.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!