Django restframework 인증, 권한, 스트리밍 제한
5220 단어 Django
구성 파일에서 글로벌 기본 인증 체계를 구성할 수 있습니다.
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)
...
인증 실패에는 두 가지 반환 값이 있습니다.
권한 제어는 사용자가 보기에 대한 접근과 구체적인 데이터 대상에 대한 접근을 제한할 수 있다.
프로파일에 기본 권한 관리 클래스를 설정할 수 있습니다.
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,)
...
제공된 권한
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_CLASSES
및 DEFAULT_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_RATES
second
,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,)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.