#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'})