Django之权限分配展示

一.角色展示

角色展示:

def role(request):
    all_role = models.Role.objects.all()
    return render(request,'rbac/role_list.html',{'all_role':all_role})

角色添加和编辑:

def role_add_edit(request,rid=None):
    role_obj = models.Role.objects.filter(pk=rid).first()
    form_obj = RoleModel(instance=role_obj)
    if request.method == 'GET':
        return render(request,'rbac/form.html',{'form_obj':form_obj})
    else:
        form_obj = RoleModel(request.POST,instance=role_obj)
        if form_obj.is_valid():
            form_obj.save()
            return redirect('')
        else:
            return render(request, 'rbac/form.html', {'form_obj': form_obj})

删除角色:

def role_del(request,rid):
    models.Role.objects.filter(pk=rid)
    return redirect('')

页面效果:
在这里插入图片描述

二.菜单展示

显示一级和二级菜单:

def menu_list(request):
    all_menu = models.Menu.objects.all()
    all_permission = models.Permission.objects.all()
    return render(request,'',{'all_menu':all_menu,'all_permission':all_permission})

菜单编辑添加:

def menu_add_edit(request,mid=None):

    menu_obj = models.Menu.objects.filter(pk=mid).first()
    form_obj = MenuModel(instance=menu_obj)
    if request.method == 'GET':
        return render(request,'rbac/menu_list.html',{'form_obj':form_obj})
    else:
        form_obj = MenuModel(request.POST,instance=menu_obj)
        if form_obj.is_valid():
            form_obj.save()
            return redirect('')
        else:
            return render(request, 'rbac/menu_list.html', {'form_obj': form_obj})

删除菜单:

def menu_del(request,mid):
    models.Menu.objects.filter(pk=mid).delete()
    return redirect('')

页面效果:
在这里插入图片描述
点击一级菜单只显示以及菜单对应的子菜单:

def menu_list(request):
    mid = request.GET.get('mid')
    all_menu = models.Menu.objects.all()
    if mid:
        all_permission = models.Permission.objects.filter(Q(menus_id=mid)| Q(parent__menus_id=mid))  # 一级菜单或者一级菜单的子菜单
    else:
        all_permission = models.Permission.objects.all()
    return render(request,'',{'all_menu':all_menu,'all_permission':all_permission})

将一级菜单的子菜单划归到一级菜单中去:

def menu_list(request):
    mid = request.GET.get('mid')
    all_menu = models.Menu.objects.all()
    if mid:
        all_permission = models.Permission.objects.filter(Q(menus_id=mid)| Q(parent__menus_id=mid)).values('menus_id','menus__title','id','url','url_name','parent_id','title','parent__title')  # 一级菜单或者一级菜单的子菜单
    else:
        all_permission = models.Permission.objects.all().values('menus_id','menus__title','id','url','url_name','parent_id','title','parent__title')

    #
    all_permission_dict = {}
    for i in all_permission:
        if i.get('menus_id'):  # 一级菜单
            all_permission_dict[i.get('id')] = i
            i['children'] = []  # 给一级菜单中加一个children列表用于放一级菜单下的子菜单


    for k in all_permission:
        pid = k.get('parent_id')
        if pid:
            all_permission_dict[pid]['children'] = k

    return render(request,'',{'all_menu':all_menu,'all_permission_dict':all_permission_dict,'mid':mid})

html:

{% extends 'layout.html' %}
{% block css %}

    <style>
        .permission-area tr.parent {
            background-color: #cae7fd;;
        }

        .menu-body tr.active {
            background-color: #f1f7fd;
            border-left: 3px solid #fdc00f;
        }

    </style>

{% endblock %}
{% block content %}

    <div style="margin-top: 20px">
        <div class="col-sm-3">
        <div class="panel panel-default">
        <div class="panel-heading"><i class="fa fa-book"></i>菜单管理<a href="{% url 'rbac:menu_add' %}"
                                                                    class="btn btn-success pull-right" style="padding: 2px 8px;margin: -3px"><i class="fa fa-plus"></i>新建</a></div>
        <div class="panel-body">
        <table class="table table-hover" style="margin-top: 5px">
        <thead>
        <tr>
            <th>名称</th>
            <th>图标</th>
            <th>操作</th>
        </tr>
        </thead>
        <tbody class="menu-body">
        {% for menu in all_menu %}
            <tr class="{% if mid == menu.id|safe %}active{% endif %}">  {# 一级菜单等于一级菜单时  mid:一级菜单  menu.id:一级菜单 #}
                <td><a href="{% url 'rbac:menu_list' %}?mid={{ menu.id }}">{{ menu.title }}</a></td>
                <td><i class="fa {{ menu.icon }}"></i></td>
                <td>
                    <a href="{% url 'rbac:menu_edit' menu.id %}"> <i class="fa fa-edit"></i> </a>
                    <a href="{% url 'rbac:menu_del' menu.id %}"> <i class="fa fa-trash-o"></i> </a>
                </td>
            </tr>

        {% endfor %}

        </tbody>
    </table>
        </div>
    </div>
    </div>

    <div class="col-sm-9">
    <div class="panel panel-default">
         <div class="panel-heading"><i class="fa fa-cubes"></i> 权限管理
                    <a href="" class="btn btn-primary btn-sm pull-right "
                       style="padding: 2px 8px;margin: -3px;"> <i class="fa fa-scissors"></i> 批量操作</a>
                    <a href="{% url 'rbac:permission_add' %}" class="btn btn-success btn-sm pull-right "
                       style="padding: 2px 8px;margin: -3px;"> <i class="fa fa-plus"></i> 新建</a>
                </div>
        <div class="panel-body">
            <table class="table table-hover" style="margin-top: 5px">
        <thead>
        <tr>
            <th>名称</th>
            <th>URL</th>
            <th>URL别名</th>
            <th>菜单</th>
            <th>所属菜单</th>
            <th>操作</th>
        </tr>
        </thead>
        <tbody class="permission-area">
        {% for parent_permission in all_permission_dict.values %}
            <tr class="parent">
                <td><i class="fa fa-caret-down icon"></i>{{ parent_permission.title }}</td>
                <td>{{ parent_permission.url }}</td>
                <td>{{ parent_permission.url_name }}</td>
                <td>{{ parent_permission.menus__title }}</td>
{#                <td>{{ parent_permission.parent__title|default:'无' }}</td>#}
                <td></td>
                <td>
                    <a href=""> <i class="fa fa-edit"></i> </a>
                    <a href=""> <i class="fa fa-trash-o"></i> </a>
                </td>
            </tr>
                {% for child_permission in parent_permission.children %}
                <tr>
                    <td>{{ child_permission.title }}</td>
                    <td>{{ child_permission.url }}</td>
                    <td>{{ child_permission.url_name }}</td>
                    <td></td>
                    <td>{{ child_permission.parent__title }}</td>
                    <td>
                        <a href=""> <i class="fa fa-edit"></i> </a>
                        <a href=""> <i class="fa fa-trash-o"></i> </a>
                    </td>
                </tr>
            {% endfor %}
        {% endfor %}
        </tbody>
    </table>
        </div>
    </div>
    </div>
    </div>

{% endblock %}

{% block js %}
    <script>
    $('.parent').click(function () {
        $(this).find('.icon').toggleClass('fa-caret-right');
        $(this).nextUntil('.parent').toggleClass('hidden');

    })
    </script>
{% endblock %}

猜你喜欢

转载自blog.csdn.net/qq_39253370/article/details/106422706