Django restframework 인증, 권한, 스트리밍 제한

5220 단어 Django
Authentication 인증
구성 파일에서 글로벌 기본 인증 체계를 구성할 수 있습니다.
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',   #     
        'rest_framework.authentication.SessionAuthentication',  # session  
    )
}

모든 보기에서 authentication을 설정할 수도 있습니다classess 속성으로 설정
from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from rest_framework.views import APIView

class ExampleView(APIView):
    authentication_classes = (SessionAuthentication, BasicAuthentication)
    ...

인증 실패에는 두 가지 반환 값이 있습니다.
  • 401 Unauthorized 미인증
  • 403 Permission Denied 권한 금지
  • 권한Permissions
    권한 제어는 사용자가 보기에 대한 접근과 구체적인 데이터 대상에 대한 접근을 제한할 수 있다.
  • 보기의 디스패치 () 방법을 실행하기 전에 보기 접근 권한에 대한 판단을 먼저 한다
  • getobject()가 구체적인 대상을 가져올 때 대상 접근 권한에 대한 판단
  • 사용
    프로파일에 기본 권한 관리 클래스를 설정할 수 있습니다.
    REST_FRAMEWORK = {
        'DEFAULT_PERMISSION_CLASSES': (
            'rest_framework.permissions.IsAuthenticated',
        )
    }
    

    지정하지 않으면 다음과 같은 기본 설정을 사용합니다
    'DEFAULT_PERMISSION_CLASSES': (
       'rest_framework.permissions.AllowAny',
    )
    

    구체적인 보기에서permission을 통해classes 속성으로 설정합니다. 예를 들어
    from rest_framework.permissions import IsAuthenticated
    from rest_framework.views import APIView
    
    class ExampleView(APIView):
        permission_classes = (IsAuthenticated,)
        ...
    

    제공된 권한
  • AllowAny - 모든 사용자 허용
  • IsAuthenticated는 인증을 통과한 사용자만
  • IsAdminUser 관리자 전용 사용자
  • Is Authenticated OrReadOnly 인증 사용자는 완전히 조작할 수 있으며, 그렇지 않으면 get만 읽을 수 있음
  • 예를 들다.
    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]
        permission_classes = [IsAuthenticated]
    

    사용자 지정 권한
    사용자 정의 권한이 필요하면rest 계승해야 합니다framework.permissions.BasePermission 상위 클래스 및 다음 두 가지 방법 또는 모두 구현
  • .has_permission(self, request, view)에 접근할 수 있는지,view는 현재 보기 대상
  • 을 표시합니다
  • .has_object_permission(self, request, view, obj) 데이터 대상에 접근할 수 있는지,view는 현재 보기를 표시하고obj는 데이터 대상
  • 예를 들면 다음과 같습니다.
    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]

    스트리밍 제한 Throttling
    인터페이스의 접근 빈도를 제한하여 서버의 압력을 줄일 수 있다.
    사용
    구성 파일에서 DEFAULT_THROTTLE_CLASSESDEFAULT_THROTTLE_RATES를 사용하여 전역적으로 구성할 수 있습니다.
    REST_FRAMEWORK = {
        'DEFAULT_THROTTLE_CLASSES': (
            'rest_framework.throttling.AnonRateThrottle',
            'rest_framework.throttling.UserRateThrottle'
        ),
        'DEFAULT_THROTTLE_RATES': {
            'anon': '100/day',
            'user': '1000/day'
        }
    }
    
    DEFAULT_THROTTLE_RATESsecond,minute,hour 또는 day로 주기를 나타낼 수 있습니다.
    특정 뷰에서throttleclassess 속성으로 설정합니다. 예를 들어
    from rest_framework.throttling import UserRateThrottle
    from rest_framework.views import APIView
    
    class ExampleView(APIView):
        throttle_classes = (UserRateThrottle,)
        ...
    

    옵션 스트리밍 클래스
    1) AnonRateThrottle
    모든 익명 인증되지 않은 사용자를 제한하고 IP를 사용하여 사용자를 구분합니다.DEFAULT_THROTTLE_RATES['anon']를 사용하여 빈도 설정
    2)UserRateThrottle
    인증 사용자를 제한하고 User id를 사용하여 구분합니다.DEFAULT_THROTTLE_RATES['user']를 사용하여 빈도 설정
    3)ScopedRateThrottle
    모든 보기에 대한 사용자의 접근 빈도를 제한하고 IP나user id를 사용합니다.
    예를 들면 다음과 같습니다.
    class ContactListView(APIView):
        throttle_scope = 'contacts'
        ...
    
    class ContactDetailView(APIView):
        throttle_scope = 'contacts'
        ...
    
    class UploadView(APIView):
        throttle_scope = 'uploads'
        ...
    
    REST_FRAMEWORK = {
        'DEFAULT_THROTTLE_CLASSES': (
            'rest_framework.throttling.ScopedRateThrottle',
        ),
        'DEFAULT_THROTTLE_RATES': {
            'contacts': '1000/day',
            'uploads': '20/day'
        }
    }
    

    인스턴스
    from rest_framework.authentication import SessionAuthentication
    from rest_framework.permissions import IsAuthenticated
    from rest_framework.generics import RetrieveAPIView
    from rest_framework.throttling import UserRateThrottle
    
    class BookDetailView(RetrieveAPIView):
        queryset = BookInfo.objects.all()
        serializer_class = BookInfoSerializer
        authentication_classes = [SessionAuthentication]
        permission_classes = [IsAuthenticated]
        throttle_classes = (UserRateThrottle,)

     

    좋은 웹페이지 즐겨찾기