赞
踩
权限控制可以限制用户对于视图的访问和对于具体数据对象的访问。
第一种:
settings.py中,全局设置,设置默认的权限管理类permission_classes:
- REST_FRAMEWORK = {
- 'DEFAULT_PERMISSION_CLASSES': (
- 'rest_framework.permissions.IsAuthenticated',
- )
- }
第二种:
也可以在具体的视图中,通过permission_classes属性来设置(在当前视图设置的,等级是比全局设置要高的)
- from rest_framework.authentication import SessionAuthentication
- from rest_framework.permissions import IsAuthenticated
- from rest_framework.generics import RetrieveAPIView
-
- class BookDetailView(RetrieveAPIView):
- queryset = BookInfo.objects.all()
- serializer_class = BookInfoSerializer
-
- # 认证管理
- # 认证管理一般和权限管理配合使用
- authentication_classes = [SessionAuthentication] # 此视图,采用session认证
- permission_classes = [IsAuthenticated] # 权限是,必须通过了认证机制
第三种:
在项目中,未指明(未设置)permission_classes,则Django采用如下默认配置
- 'DEFAULT_PERMISSION_CLASSES': (
- 'rest_framework.permissions.AllowAny',
- )
第四种(重点):
自定义权限,需继承rest_framework.permissions.BasePermission父类,并实现以下两个任何一个方法或全部
注意:其实很简单,就是True还是False
方法1:
has_permission(self, request, view)
是否可以访问视图, view表示当前视图对象 => 对视图访问权限的自定义
方法2:
has_object_permission(self, request, view, obj)
是否可以访问数据对象, view表示当前视图, obj为数据对象 => 对该对象访问的权限自定义
例子:
- rest_framework.permissions import BasePermission
-
- class MyPermission(BasePermission):
- def has_object_permission(self, request, view, obj):
- """ 控制对obj对象的访问权限,此案例拒绝所有对数据对象的访问 """
- return False
-
- class BookInfoViewSet(ModelViewSet):
- queryset = BookInfo.objects.all()
- serializer_class = BookInfoSerializer
-
- # 即,即使认证通过了,但是不能对数据对象进行访问
- permission_classes = [IsAuthenticated, MyPermission]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。