crm 动态一级二级菜单

阅读: 评论:0

crm 动态一级二级菜单

crm 动态一级二级菜单

之前代码菜单是写是的

如何 让他 动态 生成了  首先 添加 2个字段

admin.py 更改 显示

ib import admin
from rbac import models# Register your models here.class PermissionAdmin(admin.ModelAdmin):list_display = ['url', 'title','is_menu','icon']#列表显示list_editable = ['title','is_menu','icon']#可编辑
ister(models.Permission, PermissionAdmin)
ister(models.Role)
ister(models.User)

然后进入 admin 把设为 一级菜单的 图标设置上去

auth.py 进行 mode筛选

def login(request):hod == 'POST':# 获取用户名和密码user = ('user')pwd = ('pwd')# 去数剧库进行筛选obj = models.User.objects.filter(name=user, pwd=pwd).first()if not obj:return render(request, 'login.html')permission_query = les.filter(permissions__url__isnull=False).values('permissions__url','permissions__title','permissions__is_menu','permissions__icon').distinct()#通过查询到的用户的obj反查角色表,values 正向查询当前用户的权限表的url信息 title
permission_list=[]#存放权限信息menu_list=[]#存放菜单信息for item in permission_query:permission_list.append({'url':item['permissions__url']})('permissions__is_menu'):menu_list.append({'url':item['permissions__url'],'icon':item['permissions__icon'],'title':item['permissions__title']})# print('1111',permission_query)  # <QuerySet [{'permissions__url': '/index/', 'permissions__title': '首页'}]>#将权限信息写入到sessionrequest.session[settings.PERMISSION_SESSION_KEY]=permission_list#将菜单 信息 写入sessionrequest.session[settings.MENU_SESSION_KEY]=menu_listrequest.session['is_login'] = Truereturn redirect(reverse('index'))return render(request, 'login.html')

settings.py中定义

# 白名单
WHITE_LIST = [r'^/login/$',r'^/reg/$',r'^/admin/.*',
]
# 免认证的地址  需要登录 不行权限校验
NO_PERMISSION_LIST = ['/index/'
]
#权限信息url key
PERMISSION_SESSION_KEY='permissions'
#存放菜单信息
MENU_SESSION_KEY='menus'

更改一下 rbacapp中  更改 中间件中 middlewares/rbac.py 相应的值

        # 获取当前用户的权限permission_list = request.session[settings.PERMISSION_SESSION_KEY]print(permission_list)# 权限的校验for i in permission_list:if re.match('^{}$'.format(i['url']), url):return# 没匹配成功  没有权限return HttpResponse('没有访问的权限')

layout.html中 跟改显示   这样虽然成功了 但是还是写死了menus

            <div class="static-menu">
{#                <a href="/customer/list/" class="active">#}
{#                    <span class="icon-wrap"><i class="fa fa-connectdevelop"></i></span> 客户管理</a>#}
{#                <a href="/payment/list/">#}
{#                    <span class="icon-wrap"><i class="fa fa-code-fork"></i></span> 账单管理</a>#}{% for item in us %}<a href="{{ item.url }}"><span class="icon-wrap"><i class="fa fa-code-fork"></i></span> {{ item.title }}</a>{% endfor %}</div>

如何解决?

自定义 inclusion_tag

创建 templatetags目录   rbac.py

from django import  template
f import  settings
register=template.Library()
import re
@register.inclusion_tag('menu.html')
def menu(request):menu_list=(settings.MENU_SESSION_KEY)for item in menu_list:url=item['url']if re.match('^{}$'.format(url),request.path_info):item['class']='active'return  {'menu_list':menu_list}

menu.html

            <div class="static-menu">{% for item in menu_list%}<a href="{{ item.url }}" class="{{ item.class }}"><span class="icon-wrap"><i class="fa fa-code-fork"></i></span> {{ item.title }}</a>{% endfor %}</div>

为了 下次 直接调用rbac 整合

把之前的判断 web views中的auth.py中的 查询写入session部分 移动到rbac/server/init_permission.py

f import settings
def init_permission(request, obj):permission_query = les.filter(permissions__url__isnull=False).values('permissions__url','permissions__title','permissions__is_menu','permissions__icon').distinct()permission_list = []  # 存放权限menu_list = []  # 存放菜单信息for item in permission_query:permission_list.append({'url': item['permissions__url']})('permissions__is_menu'):menu_list.append({'url': item['permissions__url'], 'icon': item['permissions__icon'],'title': item['permissions__title']})# 将权限写入sessionrequest.session[settings.PERMISSION_SESSION_KEY] = permission_list# 将菜单写入 sessionrequest.session[settings.MENU_SESSION_KEY] = menu_listrequest.session['is_login'] = True
        if not obj:return redirect(reverse('login'))# 认证成功 进行权限信息初始化(权限、菜单)
        init_permission(request, obj)return redirect(reverse('index'))

把 web下的 templatetags 移动到rbac app下

自定义标签inclusion

把menu.html  移动到新建templates/rbac/中

 

把 css部分 移动到 static/css/menu.css

二级菜单调用自动生成

更改modes中的表字段 添加 menu表

进入 admin 进行 权限 划分

 

 更改 server permission.py

    # 权限的列表permission_list = []# 菜单的字典menu_dict ={}for i in permission_query:# 把权限的信息放入permission_listpermission_list.append({'url': i['permissions__url']})menu_id = i.get('permissions__menu_id')if not menu_id:continuemenu_dict.setdefault(menu_id, {'title': i['permissions__menu__title'],'icon': i['permissions__menu__icon'],'children': []})menu_dict[menu_id]['children'].append({'title': i['permissions__title'], 'url': i['permissions__url']})

 

from django import template
f import settings
import reregister = template.Library()@register.inclusion_tag('rbac/menu.html')
def menu(request):menu_dict = request.session[settings.MENU_SESSION_KEY]return {'menu_list': menu_dict.values()}

 

rbac/static/rbac/css/menu.css

.left-menu .menu-body .static-menu {}.left-menu .menu-body .static-menu .icon-wrap {width: 20px;display: inline-block;text-align: center;
}.left-menu .menu-body .static-menu a {text-decoration: none;padding: 8px 15px;border-bottom: 1px solid #ccc;color: #333;display: block;background: #efefef;background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #efefef), color-stop(1, #fafafa));background: -ms-linear-gradient(bottom, #efefef, #fafafa);background: -moz-linear-gradient(center bottom, #efefef 0%, #fafafa 100%);background: -o-linear-gradient(bottom, #efefef, #fafafa);filter: progid:adient(startColorStr='#e3e3e3', EndColorStr='#ffffff');-ms-filter: "progid:adient(startColorStr='#fafafa',EndColorStr='#efefef')";box-shadow: inset 0px 1px 1px white;
}.left-menu .menu-body .static-menu a:hover {color: #2F72AB;border-left: 2px solid #2F72AB;
}.left-menu .menu-body .static-menu a.active {color: #2F72AB;border-left: 2px solid #2F72AB;
}.multi-menu .item {background-color: white;
}.multi-menu .item > .title {padding: 10px 5px;border-bottom: 1px solid #dddddd;cursor: pointer;color: #333;display: block;background: #efefef;background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #efefef), color-stop(1, #fafafa));background: -ms-linear-gradient(bottom, #efefef, #fafafa);background: -o-linear-gradient(bottom, #efefef, #fafafa);filter: progid:adient(startColorStr='#e3e3e3', EndColorStr='#ffffff');-ms-filter: "progid:adient(startColorStr='#fafafa',EndColorStr='#efefef')";box-shadow: inset 0 1px 1px white;
}.multi-menu .item > .body {border-bottom: 1px solid #dddddd;
}.multi-menu .item > .body a {display: block;padding: 5px 20px;text-decoration: none;border-left: 2px solid transparent;font-size: 13px;}.multi-menu .item > .body a:hover {border-left: 2px solid #2F72AB;
}.multi-menu .item > .body a.active {border-left: 2px solid #2F72AB;
}
View Code

 

<div class="multi-menu">{% for menu in menu_list %}<div class="item"><div class="title"> <i class="fa {{ menu.icon }}"></i>  {{ menu.title }}</div><div class="body">{% for child in menu.children %}<a href="{{ child.url }}"> {{ child.title }} </a>{% endfor %}</div></div>{% endfor %}</div>

layout.html应用上

{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>路飞学城</title><link rel="shortcut icon" href="{% static 'imgs/luffy-study-logo.png' %} "><link rel="stylesheet" href="{% static 'plugins/bootstrap/css/bootstrap.css' %} "/><link rel="stylesheet" href="{% static 'plugins/font-awesome/css/font-awesome.css' %} "/><link rel="stylesheet" href="{% static 'css/commons.css' %} "/><link rel="stylesheet" href="{% static 'css/nav.css' %} "/><link rel="stylesheet" href="{% static 'rbac/css/menu.css' %} "/><style>body {margin: 0;}.no-radius {border-radius: 0;}.no-margin {margin: 0;}.pg-body > .left-menu {background-color: #EAEDF1;position: absolute;left: 1px;top: 48px;bottom: 0;width: 220px;border: 1px solid #EAEDF1;overflow: auto;}.pg-body > .right-body {position: absolute;left: 225px;right: 0;top: 48px;bottom: 0;overflow: scroll;border: 1px solid #ddd;border-top: 0;font-size: 13px;min-width: 755px;}.navbar-right {float: right !important;margin-right: -15px;}.luffy-container {padding: 15px;}</style></head>
<body><div class="pg-header"><div class="nav"><div class="logo-area left"><a href="#"><img class="logo" src="{% static 'imgs/logo.svg' %}"><span style="font-size: 18px;">路飞学城 </span></a></div><div class="left-menu left"><a class="menu-item">资产管理</a><a class="menu-item">用户信息</a><a class="menu-item">路飞管理</a><div class="menu-item"><span>使用说明</span><i class="fa fa-caret-down" aria-hidden="true"></i><div class="more-info"><a href="#" class="more-item">管他什么菜单</a><a href="#" class="more-item">实在是编不了</a></div></div></div><div class="right-menu right clearfix"><div class="user-info right"><a href="#" class="avatar"><img class="img-circle" src="{% static 'imgs/default.png' %}"></a><div class="more-info"><a href="#" class="more-item">个人信息</a><a href="#" class="more-item">注销</a></div></div><a class="user-menu right">消息<i class="fa fa-commenting-o" aria-hidden="true"></i><span class="badge bg-success">2</span></a><a class="user-menu right">通知<i class="fa fa-envelope-o" aria-hidden="true"></i><span class="badge bg-success">2</span></a><a class="user-menu right">任务<i class="fa fa-bell-o" aria-hidden="true"></i><span class="badge bg-danger">4</span></a></div></div>
</div>
<div class="pg-body"><div class="left-menu"><div class="menu-body">{#                <a href="/customer/list/" class="active">#}{#                    <span class="icon-wrap"><i class="fa fa-connectdevelop"></i></span> 客户管理</a>#}{#                <a href="/payment/list/">#}{#                    <span class="icon-wrap"><i class="fa fa-code-fork"></i></span> 账单管理</a>#}{% load rbac %}{% menu request %}</div></div><div class="right-body"><div><ol class="breadcrumb no-radius no-margin" style="border-bottom: 1px solid #ddd;"><li><a href="#">首页</a></li><li class="active">客户管理</li></ol></div>{% block content %} {% endblock %}</div>
</div><script src="{% static 'js/jquery-3.3.1.min.js' %} "></script>
<script src="{% static 'plugins/bootstrap/js/bootstrap.js' %} "></script><script>$('.multi-menu .title').click(function () {$(this).next().toggleClass('hide')})</script>{% block js %} {% endblock %}
</body>
</html>

 

转载于:.html

本文发布于:2024-02-01 07:05:39,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170674233934763.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:菜单   动态   crm
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23