zoukankan      html  css  js  c++  java
  • 二级菜单

     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)
  • 相关阅读:
    用redis实现分布式锁
    mac下Nginx+lua模块编译安装
    ESXi5 中克隆Linux虚拟主机的网络配置
    DOS命令中的For
    让delphi解析chrome扩展的native应用
    C语言 cgi(3)
    C语言 cgi(2)
    C语言cgi(1)
    c++ input,output
    Array of Objects
  • 原文地址:https://www.cnblogs.com/xuqidong/p/12548777.html
Copyright © 2011-2022 走看看