赞
踩
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)
然后创建模型,再看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'),
)
将上面创建的表删除,需要在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('权限创建成功!'
path('add_permission/',views.add_permission,name='add_permission')
访问视图函数
查看auth_permission表可以看到有刚才创建的权限
权限本身只是一个数据,必须和用户进行绑定,才能起到作用。User模型和权限之间的管理,可以通过以下几种方式来管理:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。