Содержимое ответа должно быть отображено, прежде чем к нему можно будет получить доступ
Я пытаюсь сделать пользовательский формат ответа, для этого я сделал нижеуказанный код
middleware
from django.utils.deprecation import MiddlewareMixin
from rest_framework.response import Response
from rest_framework.exceptions import APIException
class CustomResponseMiddleware(MiddlewareMixin):
def process_response(self, request, response):
from adminPanel.serializers import MyCustomException
if not isinstance(response, Response):
return response
response.render()
if 'data' in response.data:
return response
response_data = {
'status': response.status_code,
'message': 'Success',
'error': False,
'data': response.data,
'error_message': None,
}
if isinstance(response, MyCustomException):
error_message = response.detail.get('error_message', None)
response_data = {
'status': response.status_code,
'message': 'Error',
'error': True,
'data': None,
'error_message': error_message,
}
return Response(response_data, status=response.status_code)
в файле setting.py
'adminPanel.middleware.custom_response.CustomResponseMiddleware',
serializers.py
Мой взгляд
class LoginView(generics.GenericAPIView):
serializer_class = LoginSerializer
def post(self, request, *args, **kwargs):
try:
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
response_data = serializer.validated_data
request_source = response_data.get('request_source')
if request_source == 'web':
return Response(
data=response_data,
status=status.HTTP_302_FOUND, # HTTP status code for redirection
headers={'Location': response_data.get('redirect_url')} # Redirection URL
)
return Response(data=response_data, status=status.HTTP_200_OK)
except MyCustomException as exc:
# If a custom exception is raised, return the error response
return Response(data={"error_message": exc.detail}, status=exc.status_code)
except Exception as e:
# Handle other exceptions
error_message = "An unexpected error occurred."
return Response(data={"error_message": error_message}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
если ответ успешный, то я получаю желаемый ответ следующим образом
{
"status": 200,
"message": "Redirect to dashboard",
"error": false,
"data": "/dashboard",
"user_type": "seller"
}
Но если возникает какая-либо ошибка, то я получаю следующее ContentNotRenderedError at /api/login/ Содержимое ответа должно быть отрендерено, прежде чем к нему можно будет получить доступ.
Заранее благодарю за помощь