热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DjangoRestFramework【DRF授权】

详细方法参考Django官方授权API1.全局权限在setting中配置授权管理,这个授权是全局的,对于每一个视图都生效REST_FRAMEWORK{#全局配置优先级高于视图


详细方法参考Django官方授权API


1.全局权限

setting中配置授权管理,这个授权是全局的,对于每一个视图都生效

REST_FRAMEWORK = {
# 全局配置 优先级高于视图类中的配置
# 默认权限配置:每一个http方法都可以有对应的权限配置
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.AllowAny',
]
# 修改权限管理 必须授权才可以使用
# 'DEFAULT_PERMISSION_CLASSES': [
# 'rest_framework.permissions.IsAuthenticated',
# ]
}

2. 视图级别权限

2.1 给所有功能授权同样权限

shop.viess.py代码

from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated, IsAdminUser
from shop.models import Category, Goods
from shop.serializers import CategorySerializer, GoodsSerializer
class CategoryViewSets(viewsets.ModelViewSet):
"""
分类视图:
继承ModelViewSet之后拥有GET POST PUT PATCH DELETE等HTTP动词操作
serilizer_class 指明序列化类
"""

queryset = Category.objects.all()
serializer_class = CategorySerializer
# 用户未登入不显示 分类列表 优先级高于全局配置,第一参数是管理员可以查看,第二个参数是授权可以查看
permission_classes = [IsAdminUser,IsAuthenticated]

没有授权的时候的显示:
在这里插入图片描述
在Apifox或者postman中使用管理员账户登入测试
选择BasicAuth,使用管理员账户登入之后就可以查询到结果
在这里插入图片描述


2.2.根据不同身份对同一个视图设置不同的权限

需求:超级管理员可以创建分类 普通用户可以查看分类
shop.view.py代码:

from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated, IsAdminUser
from shop.models import Category, Goods
from shop.serializers import CategorySerializer, GoodsSerializer
class CategoryViewSets(viewsets.ModelViewSet):
"""
分类视图:
继承ModelViewSet之后拥有GET POST PUT PATCH DELETE等HTTP动词操作
serilizer_class 指明序列化类
"""

queryset = Category.objects.all()
serializer_class = CategorySerializer
# 用户未登入不显示 分类列表 优先级高于全局配置
# permission_classes = [IsAdminUser,IsAuthenticated]
# 需求:超级管理员可以创建分类 普通用户可以查看分类
def get_permissions(self):
if self.action == "create" or self.action == "update" or self.action == "partial_update" or self.action == "destroy":
return [IsAdminUser()]
else:
return []

效果演示,使用普通用户登入,然后添加商品分类:
就会报错没有权限进行添加操作
在这里插入图片描述


2.3.自定义权限

在子app下面创建一个权限类shop.permission.py

"""
自定义权限
"""

from rest_framework import permissions
class CategorysPermission(permissions.BasePermission):
def has_permission(self, request, view):
# 重写has_permission方法
# 如果返回Ture所有权限都有,如果返回False所有权限都没有
return False

views.py中引用这个自定义视图类

from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated, IsAdminUser
from shop import permissions
from shop.models import Category, Goods
from shop.serializers import CategorySerializer, GoodsSerializer
class CategoryViewSets(viewsets.ModelViewSet):
"""
分类视图:
继承ModelViewSet之后拥有GET POST PUT PATCH DELETE等HTTP动词操作
serilizer_class 指明序列化类
"""

queryset = Category.objects.all()
serializer_class = CategorySerializer
# 用户未登入不显示 分类列表 优先级高于全局配置
# permission_classes = [IsAdminUser,IsAuthenticated]
# 需求:超级管理员可以创建分类 普通用户可以查看分类
def get_permissions(self):
if self.action == "create" or self.action == "update" or self.action == "partial_update" or self.action == "destroy":
return [permissions.has_permission()]
else:
return []

3.模型级别权限






推荐阅读
author-avatar
大大炮
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有