167.权限-添加权限的两种方式
Django中内置了权限功能,他的权限都是针对表与模型级别的,比如对某个模型上的数据是否可以进行增删改查操作,它不能针对数据级别,比如针对某个表的某条数据进行增删改查操作如果要实现数据级别的,考虑使用django.guardian.
1.通过定义模型的方式添加权限
(1)权限都是django.contrib.auth.Permission的实例。这个模型包含三个字段:name、codename、content_type,其中的content_type表示这个permission是属于哪个app下的哪个models。
(2)使用Django创建模型,在映射到数据库中之后,就会默认的为项目创建auth_permission表,表中的字段:name(权限的描述信息);content_type_id(django_content_type表中的key,即代表的是app对应的模型);codename(权限的名字)。在我们创建模型的时候,Django默认会为我们添加增(add)、删(delete)、改(change)、查(view)权限,如果想要对某个表或者是模型添加权限。那么,我们可以在定义模型的时候,在Meta类中指定permission。示例代码如下:
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.CharField(max_length=100)
author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
class Meta:
permissions = {
('black_article', '拉黑文章')
}
在views.py文件中为user添加该权限。分析:如果想要为用户添加拉黑文章的权限,那么就需要使用ContentType和Permission模型创建实例对象,首先需要导入Django内置的这两个模型。
示例代码如下:
from django.contrib.auth.models import Permission, ContentType
def permission_view(request):
# 1. 通过ContentType模型获取要添加的某个app下的某个模型
content_type = ContentType.objects.get_for_model(Article)
# 2. 创建权限示例
permission = Permission.objects.create(content_type=content_type)
if permission:
print('添加权限成功!')
else:
print('您不能添加该权限!')
return HttpResponse('添加权限!')
之后,就可以在auth_permission中查看到我们添加的拉黑文章的权限了。
2. 通过代码的形式
def permission_view(request):
# 2. 通过代码的形式添加权限
content_type = ContentType.objects.get_for_model(Article)
Permission.objects.create(codename='black_article', name='拉黑文章', content_type=content_type)
return HttpResponse('添加权限!')
始于才华,忠于颜值;每件事情在成功之前,看起来都是天方夜谭。一无所有,就是无所不能。