做用 : 校驗用戶是否有權限訪問html
from rest_framework.permissions import BasePermission class myPermission(BasePermission): #權限認證失敗的提示信息.... message = '不是超超級用戶,查看不了' def has_permission(self, request, view): if request.user.usertyle != 3: return False else: return True
permission_classes=[myPermission,]
REST_FRAMEWORK={ "DEFAULT_AUTHENTICATION_CLASSES": ["app01.service.auth.Authentication",], "DEFAULT_PERMISSION_CLASSES":["app01.service.permissions.SVIPPermission",] }
權限類使用順序:先用視圖類中的權限類,再用settings裏配置的權限類,最後用默認的權限類python
class User(models.Model): username=models.CharField(max_length=32) password=models.CharField(max_length=32) user_type=models.IntegerField(choices=((1,'超級用戶'),(2,'普通用戶'),(3,'二筆用戶'))) class UserToken(models.Model): user=models.OneToOneField(to='User') token=models.CharField(max_length=64)
from rest_framework.permissions import BasePermission class myPermission(BasePermission): message = '不是超超級用戶,查看不了' def has_permission(self, request, view): #檢測是否有權限 if request.user.usertyle != 3: return False else: return True
from app01.auth import myAuthen from app01.auth import myPermission class Book(APIView): authentication_classes = [myAuthen, ] permission_classes=[myPermission,] def get(self, request): response = MyResponse() print(request.user.name) print(request.auth.token) # 必須登錄才能訪問 books = models.Book.objects.all() ret = myserial.BookSer(instance=books, many=True) response.msg = '查詢成功' response.data = ret.data return JsonResponse(response.get_dic, safe=False)
第二個例子app
from rest_framework.permissions import BasePermission class UserPermission(BasePermission): message = '不是超級用戶,查看不了' def has_permission(self, request, view): # user_type = request.user.get_user_type_display() # if user_type == '超級用戶': user_type = request.user.user_type print(user_type) if user_type == 1: return True else: return False class Course(APIView): authentication_classes = [TokenAuth, ] permission_classes = [UserPermission,] def get(self, request): return HttpResponse('get') def post(self, request): return HttpResponse('post')
全局使用 在setting中添加函數
REST_FRAMEWORK={ "DEFAULT_AUTHENTICATION_CLASSES":["app01.service.auth.Authentication",], "DEFAULT_PERMISSION_CLASSES":["app01.service.permissions.SVIPPermission",] }
def check_permissions(self, request): for permission in self.get_permissions(): if not permission.has_permission(request, self): self.permission_denied( request, message=getattr(permission, 'message', None) )
self.get_permissions()源碼分析
def get_permissions(self): return [permission() for permission in self.permission_classes]
大帥逼的連接post