權限組件
權限組件的目的是爲了控制用戶權限,實現不同權限訪問不同資源
rest_framework運行的權限組件的時間和認證組件相同
上一篇博客rest_framework學習(四)認證組件已經提到了,不再贅述。
當執行了self.check_permissions(request)方法,即執行該視圖函數所有的權限組件
def check_permissions(self, request):
"""
Check if the request should be permitted.
Raises an appropriate exception if the request is not permitted.
"""
for permission in self.get_permissions():
if not permission.has_permission(request, self):
self.permission_denied(
request, message=getattr(permission, 'message', None)
)
常用的rest_framework自帶的權限組件
- AllowAny
- IsAuthenticated
- IsAdminUser
- IsAuthenticatedOrReadOnly
自定義權限組件
實現自定義權限組件必須要繼承rest_framework.permissions.BasePermission
from rest_framework.permissions import BasePermission
class UserPermisson(BasePermission):
message='您沒權限查看'
def has_permission(self, request, view):
user_type=request.user.user_type
if user_type==2: # 如果用戶權限爲2,可以訪問
return True
else:
return False
這裏需要注意,有兩種方法給函數添加權限功能:
第一種:
在對應函數下添加:
permission_classes = [MyAuth.UserPermisson,]
第二種:
在settings中全局配置:
REST_FRAMEWORK={
'DEFAULT_PERMISSION_CLASSES':['app01.MyAuth.UserPermisson',]
}
配置之後所有的方法都需認證,當想局部禁用認證時,需在對應函數中添加下面這句
permission_classes = []