Django Rest_Framework Throttling 예외 메시지 다시 쓰기

6302 단어 PythonDjango
CBV 재작성 방법
CBV 모드에서 메시지 비정상 처리를 다시 작성합니다.
class OrderProcess(APIView):

    # authentication_classes = [MyAuthentication, ]
    # permission_classes = [MyPermissions, ]
    #         
    throttle_classes = [MyThrottling, ]

    def get(self, request, *args, **kwargs):
        result = {
            "id" : 1,
            "name" : "rest_framework"
        }
        json_str = json.dumps(result, ensure_ascii=False, indent=4)
        return HttpResponse(json_str)
    
    def throttled(self, request, wait):
        """
                ,      
        """
        
        class Throttled(exceptions.Throttled):
            """
                Throttled,      
            """
            default_detail = '     .'
            extra_detail_singular = '  {wait}        .'
            extra_detail_plural = '  {wait}        .'

        raise Throttled(wait)

FBV 재작성 방법
FBV가 없습니다. 전역 재작성 방식을 참고하십시오
전역 재작성 방식
FBV 모드에서 CBV 전역 모드에서 메시지 비정상 처리를 다시 쓰기에 적합합니다.
4
  • 사용자 정의 이상 처리 함수를 실현하고 이 함수는Throttled 이상이 발생한 상황에서 사용자 정의 응답을 되돌려줍니다
  • from rest_framework.exceptions import Throttled
    from rest_framework.views import exception_handler
    
    def customize_exception_handler(exc, context):
        """
               
        :param exc:
        :param context:
        :return:
        """
        response = exception_handler(exc, context)
    
        if isinstance(exc, Throttled):
            detail = {
                'message': '     .',
                'availableIn': '  {wait}        .'.fromat(wait=exc.wait)
            }
            response.data = detail
    
        return response
    

    4
  • DRF 설정에 이 사용자 정의 예외 처리 프로그램을 추가합니다
  • REST_FRAMEWORK = {
        'EXCEPTION_HANDLER': 'xxxxxx.customize_exception_handler'
    }
    

    좋은 웹페이지 즐겨찾기