{"id":1296,"date":"2025-01-21T22:59:08","date_gmt":"2025-01-21T14:59:08","guid":{"rendered":"http:\/\/www.chan.ink\/?p=1296"},"modified":"2025-01-21T23:00:27","modified_gmt":"2025-01-21T15:00:27","slug":"%e3%80%90django%e5%89%8d%e7%ab%af%e6%8c%89%e9%92%ae%e7%ba%a7%e6%9d%83%e9%99%90%e6%8e%a7%e5%88%b6%e7%bb%84%e4%bb%b6%e3%80%91","status":"publish","type":"post","link":"http:\/\/www.chan.ink\/index.php\/2025\/01\/21\/%e3%80%90django%e5%89%8d%e7%ab%af%e6%8c%89%e9%92%ae%e7%ba%a7%e6%9d%83%e9%99%90%e6%8e%a7%e5%88%b6%e7%bb%84%e4%bb%b6%e3%80%91\/","title":{"rendered":"\u3010Django|\u524d\u7aef\u6309\u94ae\u7ea7\u6743\u9650\u63a7\u5236\u7ec4\u4ef6\u3011"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u5bf9\u5e94\u7684\u6a21\u677f\u51fd\u6570<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from django.http import QueryDict\nfrom django.template import Library\nfrom django.conf import settings\nimport copy\nfrom django.urls import reverse\nfrom django.utils.safestring import mark_safe\n\nregister = Library()\n\ndef check_permission(request,name):\n    #1.\u83b7\u53d6\u5f53\u524d\u767b\u5f55\u7528\u6237\u6240\u5c5e\u89d2\u8272\n    role = request.userinfo.role\n\n    #2.\u6839\u636e\u89d2\u8272\u83b7\u53d6\u4ed6\u6240\u6709\u7684\u6743\u9650\u5b57\u5178\n    permission_dict = settings.NB_PERMISSION&#91;role]\n\n    if name in permission_dict:\n        return True\n    if name in settings.NB_PERMISSION_PUBLIC:\n        return True\n\n\n@register.simple_tag\ndef add_permission(request,name,*args,**kwargs):\n\n    #3.\u5224\u65ad\u662f\u5426\u5177\u6709\u6743\u9650\n    if not check_permission(request,name):\n        #3.1\u65e0\u6743\u9650\uff0c\u5219\u8fd4\u56de\u7a7a\n        return \"\"\n    #3.2\u6709\u6743\u9650\uff0c\u901a\u8fc7\u2018customer_add\u2019\u53cd\u5411\u751f\u6210URL\n    url = reverse(name,args=args,kwargs=kwargs)\n    tpl = \"\"\"\n    &lt;a href=\"{}\" class=\"btn btn-success\">&lt;span class=\"glyphicon glyphicon-plus-sign\">&lt;\/span>\n            \u65b0\u5efa\n        &lt;\/a>\n    \"\"\".format(url)\n\n    return mark_safe(tpl)\n\n@register.simple_tag\ndef edit_permission(request,name,*args,**kwargs):\n\n    #3.\u5224\u65ad\u662f\u5426\u5177\u6709\u6743\u9650\n    if not check_permission(request,name):\n        #3.1\u65e0\u6743\u9650\uff0c\u5219\u8fd4\u56de\u7a7a\n        return \"\"\n    #3.2\u6709\u6743\u9650\uff0c\u901a\u8fc7\u2018customer_add\u2019\u53cd\u5411\u751f\u6210URL\n    url = reverse(name,args=args,kwargs=kwargs)\n\n    #\u6839\u636e\u5f53\u524d\u7528\u6237\u8bf7\u6c42\u83b7\u53d6GET\u53c2\u6570\n    param = request.GET.urlencode()\n    if param:\n        new_query_dict = QueryDict(mutable=True)\n        new_query_dict&#91;'_filter'] = param\n        print(new_query_dict)\n        filter_string = new_query_dict.urlencode()\n        print(new_query_dict.urlencode())\n\n        tpl = \"\"\"&lt;a href=\"{}?{}\" class=\"btn btn-primary btn-xs \">\u7f16\u8f91&lt;\/a>\"\"\".format(url,filter_string)\n        return mark_safe(tpl)\n    else:\n        tpl = \"\"\"&lt;a href=\"{}\" class=\"btn btn-primary btn-xs \">\u7f16\u8f91&lt;\/a>\"\"\".format(url)\n        return mark_safe(tpl)\n@register.simple_tag\ndef delete_permission(request,name,*args,**kwargs):\n\n    #1.\u83b7\u53d6\u5f53\u524d\u767b\u5f55\u7528\u6237\u7684\u89d2\u8272\n    role = request.userinfo.role\n\n    #2.\u6839\u636e\u89d2\u8272\u83b7\u53d6\u4ed6\u6240\u6709\u7684\u6743\u9650\u5b57\u5178\n    permission_dict = settings.NB_PERMISSION&#91;role]\n\n    #3.\u5224\u65ad\u662f\u5426\u5177\u6709\u6743\u9650\n    if name not in permission_dict:\n        #3.1\u65e0\u6743\u9650\uff0c\u5219\u8fd4\u56de\u7a7a\n        return \"\"\n    #3.2\u6709\u6743\u9650\uff0c\u901a\u8fc7\u2018customer_add\u2019\u53cd\u5411\u751f\u6210URL\n    pk = kwargs.get('pk')\n    # url = reverse(name,args=args,kwargs=kwargs)\n    tpl = \"\"\"\n    &lt;a cid=\"{}\" class=\"btn btn-danger btn-xs btn-delete\">\u5220\u9664&lt;\/a>\n    \"\"\".format(pk)\n\n    return mark_safe(tpl)\n\n\n@register.simple_tag\ndef delete_url_permission(request, name, *args, **kwargs):\n    # 4.\u65e0\u6743\u9650\uff0c\u8fd4\u56de\u7a7a\n    if not check_permission(request, name):\n        return \"\"\n\n    # 5.\u6709\u6743\u9650\uff0c\u901a\u8fc7\"customer_add\"\u53cd\u5411\u751f\u6210URL\n    # pk = kwargs.get('pk')\n    # tpl = \"\"\"\n    # &lt;a cid=\"{}\" class=\"btn btn-danger btn-xs btn-delete\">\u5220\u9664&lt;\/a>\n    # \"\"\".format(pk)\n    # return mark_safe(tpl)\n\n    url = reverse(name, args=args, kwargs=kwargs)\n    tpl = \"\"\"\n    &lt;a href=\"{}\" class=\"btn btn-danger btn-xs btn-delete\">\u5220\u9664&lt;\/a>\n    \"\"\".format(url)\n    return mark_safe(tpl)\n\n\n@register.filter\ndef has_permission(request, others):\n    name_list = others.split(',')\n    for name in name_list:\n        status = check_permission(request,name)\n        if status:\n            return True\n    return False\n-------------------------------------<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u524d\u7aef\u90e8\u5206<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6dfb\u52a0<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        {% add_permission request 'customer_add' %}\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1501\" height=\"222\" src=\"http:\/\/www.chan.ink\/wp-content\/uploads\/2025\/01\/1737471431932.png\" alt=\"\" class=\"wp-image-1297\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u7f16\u8f91\u548c\u5220\u9664\u3010ajax\u3011<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{% edit_permission request 'customer_edit' pk=row.id %}\n{% delete_permission request 'customer_delete' pk=row.id %}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"765\" height=\"79\" src=\"http:\/\/www.chan.ink\/wp-content\/uploads\/2025\/01\/1737471465207.png\" alt=\"\" class=\"wp-image-1298\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u76f4\u63a5\u5220\u9664<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{% delete_url_permission request 'level_delete' pk=row.id %}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"757\" height=\"37\" src=\"http:\/\/www.chan.ink\/wp-content\/uploads\/2025\/01\/1737471534498.png\" alt=\"\" class=\"wp-image-1301\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u5224\u65ad\u6743\u9650<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"820\" height=\"108\" src=\"http:\/\/www.chan.ink\/wp-content\/uploads\/2025\/01\/1737471488839.png\" alt=\"\" class=\"wp-image-1299\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1153\" height=\"274\" src=\"http:\/\/www.chan.ink\/wp-content\/uploads\/2025\/01\/1737471500479.png\" alt=\"\" class=\"wp-image-1300\"\/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\u5bf9\u5e94\u7684\u6a21\u677f\u51fd\u6570 \u524d\u7aef\u90e8\u5206 \u6dfb\u52a0 \u7f16\u8f91\u548c\u5220\u9664\u3010ajax\u3011 \u76f4\u63a5\u5220\u9664 \u5224\u65ad\u6743\u9650<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1296","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/www.chan.ink\/index.php\/wp-json\/wp\/v2\/posts\/1296","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.chan.ink\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.chan.ink\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.chan.ink\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.chan.ink\/index.php\/wp-json\/wp\/v2\/comments?post=1296"}],"version-history":[{"count":2,"href":"http:\/\/www.chan.ink\/index.php\/wp-json\/wp\/v2\/posts\/1296\/revisions"}],"predecessor-version":[{"id":1304,"href":"http:\/\/www.chan.ink\/index.php\/wp-json\/wp\/v2\/posts\/1296\/revisions\/1304"}],"wp:attachment":[{"href":"http:\/\/www.chan.ink\/index.php\/wp-json\/wp\/v2\/media?parent=1296"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.chan.ink\/index.php\/wp-json\/wp\/v2\/categories?post=1296"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.chan.ink\/index.php\/wp-json\/wp\/v2\/tags?post=1296"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}