Django - DRF - BasePermission 권한 구성 요소

3921 단어 DRFDjango
카탈로그
1. BasePermission - 요청을 차단하고 보기 함수 돈에서 상응하는 권한 인증 방법을 실행합니다
1-1 drAuth.py - 권한 클래스 구현
1-2 보기 함수 - 권한 검증이 필요한 클래스 - permissionclasses
1-3 시퀀스 클래스 - 데이터로 반환되는 시퀀스 - ModelSerializer
1-4 모델 내choices 최적화
2. 권한 인증 설정 - permissionclasses
2-1 부분적 구성
2-2 글로벌 구성 및 부분적 비활성화
3. 원본 코드 분석
1. BasePermission - 요청을 차단하고 보기 함수 돈에서 상응하는 권한 인증 방법을 실행합니다
요약:
  • 권한 클래스
  • 권한 클래스는py 파일에 단독으로 저장해야 하며,view와 같은 파일이면 전역 어댑터를 실행할 때 오류가 발생
  • BasePermission 계승
  • from rest_framework.permissions import BasePermission

  • 무선 반환 메시지 설정 ='볼 권한이 없습니다'- 변수 이름은 메시지여야 합니다
  • 다시 쓰기haspermission 방법
  • 검증 성공 여부, True or False
  • 로 반환
  • 뷰 클래스
  • permission 구성classes = [drfAuth.UserPermission,] 로컬 인증으로 사용
  • choices 최적화
  • get 사용필드 이름display () - choices에서 대응하는 문자열 가져오기

  • 1-1 drAuth.py - 권한 클래스 구현
    from rest_framework.permissions import BasePermission
    
    
    class UserPermission(BasePermission):
        #         
        message = '       '
    
        #      has_permission
        def has_permission(self, request, view):
            user_type = request.user.user_type
            user_type_name = request.user.get_user_type_display()
            print(request.user.name)
            print(user_type_name)
            if user_type == 2:
                return True
            else:
                return False
    

    1-2 보기 함수 - 권한 검증이 필요한 클래스 - permissionclasses
    class Users(APIView):
        permission_classes = [drfAuth.UserPermission, ]
    
        def get(self, request, *args, **kwargs):
            response = {'status': 100, 'msg': '    '}
            ret = models.UserInfo.objects.all()
            ser = MySerializer.UserSerializer(ret, many=True)
            response['data'] = ser.data
            return JsonResponse(response, safe=False)
    

    1-3 시퀀스 클래스 - 데이터로 반환되는 시퀀스 - ModelSerializer
    from rest_framework import serializers
    from app01 import models
    
    class UserSerializer(serializers.ModelSerializer):
        class Meta:
            model = models.UserInfo
            fields = '__all__'
    
        user_type = serializers.CharField(source='get_user_type_display')
    
        # user_type = serializers.SerializerMethodField()
        #
        # def get_user_type(self, obj):
        #     return obj.get_user_type_display()

    1-4 모델 내choices 최적화
    from django.db import models
    
    class UserInfo(models.Model):
        name = models.CharField(max_length=32)
        user_choice = ((0, '    '), (1, '  '), (2, '    '),)
        user_type = models.IntegerField(choices=user_choice, default=0)
        pwd = models.CharField(max_length=32)
    
    

    2. 권한 인증 설정 - permissionclasses
    2-1 부분적 구성
    '''
           
       !!   :             ,          !!
    '''
    permission_classes = [drfAuth.UserPermission, ]
    

    2-2 글로벌 구성 및 부분적 비활성화
    '''
    settings    
                   REST_FRAMEWORK        
    '''
    REST_FRAMEWORK={
       'DEFAULT_PERMISSION_CLASSES':['app01.MyAuth.UserPermission',]
    }
     
    '''
                
        -               permission_classes   
        -            
    '''
    permission_classes = []
    

    3. 원본 코드 분석
    '''
    APIView - check_permissions
    
    '''
    
    def get_permissions(self):
         return [permission() for permission in self.permission_classes]
    
    
    def check_permissions(self, request):
    """
    Check if the request should be permitted.
    Raises an appropriate exception if the request is not permitted.
    """
    #    permission_classes     
    for permission in self.get_permissions():
        #          Flase -    message     
    	if not permission.has_permission(request, self):
    		self.permission_denied(
    			request, message=getattr(permission, 'message', None)
    		)
    
    

    좋은 웹페이지 즐겨찾기