動態(tài)生成一級菜單

在 rbac 的基礎(chǔ)上繼續(xù)

權(quán)限-路由

我們可以人為的認為 /customer/list 可以作為一個菜單,但是機器不知道,所以我們要告訴機器,這個路由可以做菜單

流程

  1. 告訴機器那些路由可以作為菜單
    1. 修改表結(jié)構(gòu)
  2. 將這些可以作為菜單的路由,單獨儲存起來
    1. 將菜單信息儲存到 session 中
  3. 獲取菜單信息并展示

實踐

修改表結(jié)構(gòu)

在 rbac 的表結(jié)構(gòu)上給 權(quán)限表添加兩個字段


添加的兩個字段

重點: 儲存給 session 的結(jié)構(gòu)

用戶登錄時要做兩件事:

  1. 儲存 權(quán)限列表
  2. 儲存 菜單列表
獲取權(quán)限/菜單信息
ret = obj.roles.filter(permissions__url__isnull=False).values( xxx ).distinct()

# 權(quán)限列表
permission_list = []
# 菜單列表
menu_list = []
for i in ret:
    # 僅記錄 權(quán)限路由,標(biāo)題....就不記錄了
    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片段

補充:

選中菜單的狀態(tài)


加 active 類 就可以選中

這有兩種方法:

  1. 前端做

用 JS 代碼 location.href 可以獲取當(dāng)前路由,
隨后進行循環(huán)匹配,匹配成功后加類 active
缺點: 有延遲,循環(huán)也需要時間

  1. 后端做
    因為我們是用 inclusion_tag 返回的自定義HTML代碼片段,
    所以我們可以在返回代碼之前進行匹配
    方法

    返回的HTML代碼片段
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,802評論 1 45
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,186評論 4 61
  • 概要 64學(xué)時 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,800評論 0 3
  • 此時的我正在等一個人,等他從廁所出來,等了好久,如果等一個人等到生氣我想是因為自己心里浮躁吧,可等一個人等到害怕是...
    墨雪卿多多閱讀 407評論 0 0
  • 小寶斷奶了,可是他奶奶不想來了,所以我也不想回去,不想看到他們。終于我也想病了,大寶也想病了,娃奶奶和小寶還不來。...
    肖婷_81c4閱讀 282評論 0 2

友情鏈接更多精彩內(nèi)容