当前位置:   article > 正文

Django 权限

django 权限

一、权限简介

Django中内置了权限的功能。他的权限都是针对表或者说是模型级别的。比如对某个模型上的数据是否可以进行增删改查操作。他不能针对数据级别的,比如对某个表中的某条数据能否进行增删改查操作(如果要实现数据级别的,考虑使用django-guardian)。创建完一个模型后,针对这个模型默认就有三种权限,分别是增/删/改/。可以在执行完migrate命令后,查看数据库中的auth_permission表中的所有权限。

其中的content_type_id表示对model模型的一个标识id,codename表示的是权限的名字。name表示的是这个权限的作用。
在这里插入图片描述
Django在创建模型的时候默认就会创建add、change、delete、view四个权限。
比如定义一个article文章模型

from django.contrib.auth import get_user_model
class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    author = models.ForeignKey(get_user_model(),on_delete=models.CASCADE)
  • 1
  • 2
  • 3
  • 4
  • 5

然后创建模型,再看auth_permission表有增加下图的权限
在这里插入图片描述

二、创建权限的两种方法

1、通过定义模型添加权限:
如果我们想要增加新的权限,比如编辑文章的权限,那么我们可以在定义模型的时候在Meta中定义好。示例代码如下:

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    author = models.ForeignKey(get_user_model(),on_delete=models.CASCADE)
    class Meta:
        permissions = (
            ('edit_article','can edit article'),
        )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

将上面创建的表删除,需要在model文件中注释要删除的表的model,然后执行同步命令,然后再重新创建一下,不要直接删数据库里那个表,因为其他表中有些数据是关联的,刚踩了个坑。。再看auth_permission表,多出了刚才创建的权限
在这里插入图片描述

2、通过代码添加权限

权限都是django.contrib.auth.Permission的实例。这个模型包含三个字段,name、codename以及content_type,其中的content_type表示这个permission是属于哪个app下的哪个models。
用Permission模型创建权限的代码如下:

from django.contrib.auth.models import Permission,ContentType
from .models import Article
def add_permission(request):
    content_type = ContentType.objects.get_for_model(Article)
    permission = Permission.objects.create(name='可以测试的权限', codename='test_article', content_type=content_type)
    return HttpResponse('权限创建成功!'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
path('add_permission/',views.add_permission,name='add_permission')
  • 1

访问视图函数
在这里插入图片描述
查看auth_permission表可以看到有刚才创建的权限
在这里插入图片描述

三、用户与权限管理:

权限本身只是一个数据,必须和用户进行绑定,才能起到作用。User模型和权限之间的管理,可以通过以下几种方式来管理:

  • myuser.user_permissions.set(permission_list):直接给定一个权限的列表。
  • myuser.user_permissions.add(permission,permission,…):一个个添加权限。
  • myuser.user_permissions.remove(permission,permission,…):一个个删除权限。
  • myuser.user_permissions.clear():清除权限。
  • myuser.has_perm(’<app_name>.’):判断是否拥有某个权限。权限参数是一个字符串,格式是app_name.codename。
  • myuser.get_all_permissons():获取所有的权限。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/71656
推荐阅读
相关标签
  

闽ICP备14008679号