django在模板中使用权限

Posted harrytree

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django在模板中使用权限相关的知识,希望对你有一定的参考价值。

在settings.TEMPLATES.OPTIONS.content_processors下,因为添加了 django.contrib.auth.context_processors.auth上下文处理器。

技术图片

 

 

 

因此在模板中可以直接通过perms来获取用户的所有权限, 示例代码如下:

{%  if perms.front.add_article  % }

  <a href="/article/add/" >添加文章</a>

{% endif %}

 

 

1、在app01/templates/ index.html里面定义模板

技术图片

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    首页
    {% if perms.app01.add_article %}
        <a href="#" > 添加文章 </a>
    {% endif %}

</body>
</html>

 

2、在app01/views.py里定义 index视图

#在模板中使用权限
def index(request):
    return  render( request, index.html)

3、定义路由

from django.contrib import admin
from django.urls import path
from app01 import views as app01_views

urlpatterns = [
    path(admin/, admin.site.urls),
    path("test/", app01_views.test),
    path("login/", app01_views.my_login, name = "login"),
    path("logout/", app01_views.my_logout, name = "logout"),
    path("profile/", app01_views.profile, name="profile"),
    path("add_permission/", app01_views.add_permission, name="add_permission" ),
    path("oper_permission/", app01_views.operate_permission, name="oper_permission" ),
    path("add_article/", app01_views.add_article, name="add_article" ),
    path("oper_group", app01_views.operate_group, name="oper_group"),
    path("", app01_views.index, name="index"),
]

 

4、访问http://127.0.0.1:8080/后效果如下

技术图片

 

 

说明,用户有add_article权限

技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 

5、删除掉 auth_group_permissions里面 19的权限后,再访问http://127.0.0.1:8080/

 技术图片

 

 由于group1没有对应的19权限了,所有页面中不会显示添加文章的权限

技术图片

 

 

6、直接在app01_user_user_permissions表里,给用户1添加19权限后,再访问http://127.0.0.1:8080/

技术图片

 

添加文章的权限又出现了

 技术图片

 

 

 

以上是关于django在模板中使用权限的主要内容,如果未能解决你的问题,请参考以下文章

django在模板中使用权限

如何在扩展另一个文件的 django 模板中使用带有动态内容的 html 块片段?

JavaScript 片段在 Django 模板中不起作用

Django怎么管理权限,views怎么写,模板又怎么写,求一个简单的代码,有帮助给100分

Django REST框架--认证和权限

如何在Django视图中使用for循环返回每次迭代[关闭]