Django Rest — как я могу вернуть пользовательский ответ json при сбое аутентификации?

#python #django #django-rest-framework

#python #django #django-rest-framework

Вопрос:

Я создал пользовательское промежуточное программное обеспечение для аутентификации каждого запроса get на конечную точку API, которую я создал. Вот мой код:

 class TokenMiddleware(AuthenticationMiddleware):
    def process_request(self, request):

        if request.user.is_authenticated:
            return None
        else:     
            try:
                token = request.GET[TOKEN_QUERY_PUBLIC]
                secret = request.GET[TOKEN_QUERY_SECRET]
            except Exception as e:
                # A token isn't included in the query params
                raise ValidationError(detail=str(e))

            user = auth.authenticate(request, token=token, secret=secret)

            if user:
                auth.login(request, user)
            else:
                return HttpResponse('Authentication failed', status=404)
  

Теперь, вместо того, чтобы вызывать исключения или возвращать HTTP-ответ, я хотел бы вместо этого вернуть строку JSON, что-то вроде: {'error': 'authentication failed'} . Я знаю, как я мог бы сделать это из стандартного представления, но в этом случае мне нужно сделать это из промежуточного программного обеспечения. Как я могу это сделать? Заранее спасибо!

Ответ №1:

Вы можете использовать JsonResponse :

 from django.http import JsonResponse

def process_request(self, request):
    ...
    return JsonResponse({'error': 'authentication failed'})