本节内容:

1、stark组件构建一个base.html
2、inclusion_tag自定义标签(可传参)
3、构建权限树的思路

一、stark组件构建一个base.html

作用:用于显示增删改查页面都有的标题栏和左侧菜单栏
写好base.html文件,增删改查页面直接继承

{% extends "stark/base.html" %}  # 继承这个模板文件

{% block side_bar %}  #
{% load rbac %}      # 从上到下每个app逐个找rbac.py这个文件,

{% get_menu request %}  # 调用get_menu函数,传参request

{% endblock side_bar %}

二、inclusion_tag自定义标签(可传参)

# 自定义标签,可以传参,执行下面的函数,将返回值交个menu.html渲染,
# 渲染后的结果交给调用的模板文件base.html
@register.inclusion_tag("rbac/menu.html")
def get_menu(request):
    permission_list = request.session.get("permission_list")  # 拿到登录用户权限表
    print(">>>>>>>>>>",permission_list)
    menu_list = []
    for per in permission_list:
        if per.get("type") == "menu":  # 取出菜单权限,注意要在登录的那里先注入session这里,才有东西取出
            menu_list.append(per)

    default_data = [  # 这里的使用的boostrap_treeview插件需要这种数据类型的数据
        {
            "text": '信息管理',
            "href": '',
            "tags": ['2'],
            "nodes": [
                {
                    "text": '客户管理',
                    "href": '',
                    "tags": ['1'],
                    "nodes": [
                        {
                            "text": '查看客户',
                            "href": '/stark/app01/customer/',
                            "tags": ['0']
                        },
                    ]
                },
                {
                    "text": '订单管理',
                    "href": '',
                    "tags": ['1'],
                    "nodes": [
                        {
                            "text": '查看订单',
                            "href": '/stark/app01/order/',
                            "tags": ['0']
                        },
                    ]
                },
            ]
        },

        {
            "text": '权限管理',
            "href": '',
            "tags": ['0']
        },

    ]
    return {"default_data": default_data}

三、多级权限树的思路

1、model表自关联

作用:描述父子关系,用来显示菜单栏的树型结构
这个字段可以为空,null = True
class Permission(models.Model):
    title = models.CharField(max_length=32)
    url = models.CharField(max_length=128,blank=True) # blank=True 校验的时候,可以为空
    type = models.CharField(max_length=128,choices=(("menu","菜单权限"),("button","按钮权限")),default="button")
    # 自关联字段,
    parent = models.ForeignKey("self",on_delete=models.CASCADE,null=True,blank=True) # null表示可以为空,blank告诉modelform为空不拦截

2、多级权限树的思路

首先在base.html确定你要渲染的位置,
选择你要的使用boostrap_treeview插件,
这里用inclusion_tag自定义标签,执行函数,
将返回值传给对应的menu.html模板文件,渲染后将结果交给base.html文件

四、补充知识点

1、拿到表格的映射值

val = getattr(obj,"get_"+field+"_display")
# 表对象Book点这个方法,拿到该字段的映射值,field是字段名

0 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *