09-权限-添加权限的两种方式

  1. 权限:
    1. 通过定义模型添加权限:
    2. 通过代码添加权限:

权限:

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

其中的codename表示的是权限的名字。name表示的是这个权限的作用。

通过定义模型添加权限:

如果我们想要增加新的权限,比如查看某个模型的权限,那么我们可以在定义模型的时候在Meta中定义好。示例代码如下:

1
2
3
4
5
6
7
8
9
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 = (
('view_article','can view article'),
)

通过代码添加权限:

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

1
2
3
4
from django.contrib.auth.models import Permission,ContentType
from .models import Article
content_type = ContentType.objects.get_for_model(Article)
permission = Permission.objects.create(name='可以编辑的权限',codename='edit_article',content_type=content_type)

实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#创建权限的第二种方法通过实例模型创建权限
#引入权限表
from django.contrib.contenttypes.models import ContentType
#引入models类
from url_app.models import Article
from django.contrib.auth.models import Permission
def add_permission(request):
content_type = ContentType.objects.get_for_model(Article)
'''
codename 权限的名称
name 权限的描述
content_tpye 指定那个表的权限
'''
permission = Permission.objects.create(codename='black_article',name='拉黑文章',content_type=content_type)
return HttpResponse('权限创建成功!')

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com
目录
主站