动态生成一级菜单

在 rbac 的基础上继续

权限-路由

我们可以人为的认为 /customer/list 可以作为一个菜单,但是机器不知道,所以我们要告诉机器,这个路由可以做菜单

流程

  1. 告诉机器那些路由可以作为菜单
    1. 修改表结构
  2. 将这些可以作为菜单的路由,单独储存起来
    1. 将菜单信息储存到 session 中
  3. 获取菜单信息并展示

实践

修改表结构

在 rbac 的表结构上给 权限表添加两个字段


添加的两个字段

重点: 储存给 session 的结构

用户登录时要做两件事:

  1. 储存 权限列表
  2. 储存 菜单列表
获取权限/菜单信息
ret = obj.roles.filter(permissions__url__isnull=False).values( xxx ).distinct()

# 权限列表
permission_list = []
# 菜单列表
menu_list = []
for i in ret:
    # 仅记录 权限路由,标题....就不记录了
    permission_list.append({'url':i['permission__url']})
    if i['is_menu']:
        menu_list.append(
            {
                'url':i['permission__url'],
                'title':i['permission__title'],
                'icon':i['permission__icon'],
            }
        )

request.session['储存在settings中的常量'] = permission_list
request.session['储存在settings中的常量'] = menu_list

还是利用 inclusion_tag 返回自定义HTML片段

补充:

选中菜单的状态


加 active 类 就可以选中

这有两种方法:

  1. 前端做

用 JS 代码 location.href 可以获取当前路由,
随后进行循环匹配,匹配成功后加类 active
缺点: 有延迟,循环也需要时间

  1. 后端做
    因为我们是用 inclusion_tag 返回的自定义HTML代码片段,
    所以我们可以在返回代码之前进行匹配
    方法

    返回的HTML代码片段
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,381评论 1 45
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,705评论 4 61
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 13,160评论 0 3
  • 此时的我正在等一个人,等他从厕所出来,等了好久,如果等一个人等到生气我想是因为自己心里浮躁吧,可等一个人等到害怕是...
    墨雪卿多多阅读 2,915评论 0 0
  • 小宝断奶了,可是他奶奶不想来了,所以我也不想回去,不想看到他们。终于我也想病了,大宝也想病了,娃奶奶和小宝还不来。...
    肖婷_81c4阅读 1,801评论 0 2

友情链接更多精彩内容