首页 > 其他分享 >12 Django 力度控制到按钮级别

12 Django 力度控制到按钮级别

时间:2022-08-15 12:13:44浏览次数:70  
标签:customer 12 return name permission request Django 按钮 row

易理解的按钮控制:

customer.html
{% extends 'layout.html' %}
{% load static %}
{% load permission %}

{% block content %}

    <div style="margin-bottom: 5px" class="clearfix">
        {% add_permission request "customer_add" %}

        <div class="right">
            <form class="form-inline" method="get">
                <div class="form-group">
                    <input name="keyword" type="text" class="form-control" placeholder="请输入关键字" value="{{ keyword }}">
                </div>
                <button type="submit" class="btn btn-default">
                    <span class="glyphicon glyphicon-search"></span>
                </button>
            </form>
        </div>
    </div>
    <table class="table table-bordered">
        <thead>
        <tr>
            <th>ID</th>
            <th>用户名</th>
            <th>手机号</th>
            <th>账户余额</th>
            <th>级别</th>
            <th>注册时间</th>
            <th>重置密码</th>
            {# 控制操作标签是否显示在页面上 #}
            {% if request|has_permission:"customer_edit,customer_delete" %}
                <th>操作</th>
            {% endif %}
        </tr>
        </thead>
        <tbody>
        {% for row in queryset %}
            <tr row-id="{{ row.id }}">
                <td>{{ row.id }}</td>
                <td>{{ row.username }}</td>
                <td>{{ row.mobile }}</td>
                <td>{{ row.balance }}</td>
                <td>{{ row.level.title }} ({{ row.level.percent }}%)</td>
                <td>{{ row.create_date|date:"Y-m-d H:i:s" }}</td>
                <td>
                    <a href="{% url 'customer_reset' pk=row.id %}">重置密码</a>
                </td>
                {# 控制操作标签是否显示在页面上 #}
                {% if request|has_permission:"customer_edit,customer_delete" %}
                    <td>
                        {# 函数 参数1 参数2 参数3 #}
                        {% edit_permission request "customer_edit" pk=row.id %}
                        {% delete_permission request "customer_delete" pk=row.id %}
                    </td>
                {% endif %}
            </tr>
        {% endfor %}
        </tbody>
    </table>


    <ul class="pagination">
        {{ pager_string }}
    </ul>
    {% include 'include/delete_modal.html' %}
{% endblock %}

{% block js %}
    <script src="{% static 'js/delete_modal.js' %}"></script>
    <script>
        var DELETE_ID;
        var DELETE_URL = "{% url 'customer_delete' %}";
    </script>
{% endblock %}

image


simple_tag() # 可传入多个值,返回值不固定,想返回什么就返回什么
filter() # 固定只能传入2个参数,使用方式也不同

permission.py
from django.template import Library
from django.urls import reverse
from django.conf import settings
from django.utils.safestring import mark_safe

register = Library()


def check_permission(request, name):
    # 1.获取当前登录用户的角色
    role = request.nb_user.role

    # 2.根据角色获取他所有的权限字典
    permission_dict = settings.NB_PERMISSION[role]

    if name in permission_dict:
        return True

    if name in settings.NB_PERMISSION_PUBLIC:
        return True


@register.simple_tag()
def add_permission(request, name, *args, **kwargs):
    # 3.判断是否具有权限
    # 4.无权限,返回空
    if not check_permission(request, name):
        return ""

    # 5.有权限,通过"name"反向生成url
    url = reverse(name, args=args, kwargs=kwargs)
    tpl = """
    <a href="{}" class="btn btn-success"><span class="glyphicon glyphicon-plus-sign"></span>
                新建</a>
    """.format(url)
    return mark_safe(tpl)


@register.simple_tag()
def edit_permission(request, name, *args, **kwargs):
    # 3.判断是否具有权限
    # 4.无权限,返回空
    if not check_permission(request, name):
        return ""

    # 5.有权限,通过"name"反向生成url
    url = reverse(name, args=args, kwargs=kwargs)
    tpl = """
    <a href="{}" class="btn btn-primary btn-xs">编辑</a>
    """.format(url)
    return mark_safe(tpl)


@register.simple_tag()
def delete_permission(request, name, *args, **kwargs):
    # 3.判断是否具有权限
    # 4.无权限,返回空
    if not check_permission(request, name):
        return ""

    # 5.有权限,通过"name"反向生成url
    pk = kwargs.get('pk')
    tpl = """
    <a cid="{}" class="btn btn-danger btn-xs btn-delete">删除</a>
    """.format(pk)
    return mark_safe(tpl)


@register.filter()
def has_permission(request, others):
    name_list = others.split(',')
    for name in name_list:
        status = check_permission(request, name)
        if status:
            return True
    return False

标签:customer,12,return,name,permission,request,Django,按钮,row
From: https://www.cnblogs.com/it-lkp/p/16587817.html

相关文章

  • CSP202112-4 磁盘文件操作
        第一眼,嗯,线段树裸题。开写,交,发现空间炸了,遂离散化。再交,发现在操作0的时候有可能遇到离散化中没出现过的点(即给定数据外的点),因为要二分右端点。怎么办呢?大胆观......
  • LeetCode912 排序数组(手撕快排)
    LeetCode912排序数组classSolution:defsortArray(self,nums:List[int])->List[int]:importrandomdefpartition(l:int,r:int......
  • CF1712E2的双log解法
    令\(x=\operatorname{lcm}(i,j,k)(i<j<k)\)。如果\(x<i+j+k\),那么\(x=k\)或\(2k\)。如果\(x=k\),有\(i\vertk,j\vertk\)。离线后很容易树状数组计算。如果\(x=2......
  • django的csrf跨站请求伪造
    1.什么是跨站请求伪造请看图:我们自行写了一个网站模仿中国银行,用户不知道是否是真的中国银行,并且提交了转账信息,生成一个form表单,向银行服务器发送转账请求,这个form表单......
  • django中视图函数的FBV和CBV
    1.什么是FBV和CBVFBV是指视图函数以普通函数的形式;CBV是指视图函数以类的方式。2.普通FBV形式defindex(request):returnHttpResponse('index')3.CBV形式3.1CBV形......
  • 【Linux】Java获取Linux本机ip为127.0.0.1的解决方法
    前言参考博客:Java获取Linux本机ip为127.0.0.1的解决方法最近新部署了一台服务器,环境搭建好后,运行相应的项目代码时,发现项目获取的服务器IP地址不是我想要的Java代码中......
  • luoguP3224 [HNOI2012]永无乡【线段树,并查集】
    洞庭青草,近中秋,更无一点风色。玉鉴琼田三万顷,着我扁舟一叶。素月分辉,明河共影,表里俱澄澈。悠然心会,妙处难与君说。应念岭表经年,孤光自照,肝胆皆冰雪。短发萧骚襟袖冷,稳泛......
  • java12 - 封装+继承+多态
    封装该露的露,该藏的藏我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。封装(数据......
  • P3120 [USACO15FEB]Cow Hopscotch G
    传送门思路朴素的想法就是一个\(O(n^2m^2)\)的转移:\[f_{i,j}=\sum_{x=1}^{i-1}\sum_{y=1}^{j-1}f_{x,y}*[a_{i,j}!=a_{x,y}]\]约束条件如此多,思考用cdq分治来优化......
  • 数位DP-1012. 至少有 1 位重复的数字
    问题描述给定正整数 n,返回在 [1,n] 范围内具有至少1位重复数字的正整数的个数。示例1:输入:n=20输出:1解释:具有至少1位重复数字的正数(<=20)只有11。示......