3

Comment envoyer une réponse personnalisée si les informations d'identification non autorisées ont été fournies dans le reste django.Comment envoyer une réponse personnalisée si les informations d'identification non autorisées ont été fournies dans le reste django

class StockList(APIView): 
    permission_classes = [IsAuthenticated] 

    def get(self,request): 
     stocks = Stock.objects.all() 
     serializer = StockSerializer(stocks,many=True) 
     return Response({'user': serializer.data,'post': serializer.data}) 
    def post(self): 
     pass 

Ici quand je frappe URL par les informations d'identification non valides i get erreur 401 sur le serveur de développement. Mais je veux envoyer une réponse personnalisée sur le client en utilisant json. toutes les suggestions sont les bienvenues. Merci.

+0

Voulez-vous envoyer une réponse personnalisée pour toutes les erreurs 401? –

+0

@arpit solanki oui –

Répondre

1

Vous pouvez utiliser un gestionnaire d'exceptions personnalisé pour la réponse personnalisée de l'exception API.

from rest_framework.views import exception_handler 
def custom_exception_handler(exc, context): 
    # Call REST framework's default exception handler first, 
    # to get the standard error response. 
    response = exception_handler(exc, context) 

    # Now add the HTTP status code to the response. 
    if response is not None: 
     response.data['status_code'] = response.status_code 

    if response.status_code == 401: 
     response.data['some_message'] = "Some custom message" 

    return response 

Puis, en setting.py vous devez ajouter votre gestionnaire d'erreur personnalisé

REST_FRAMEWORK = { 
    'EXCEPTION_HANDLER': 'my_project.path.to.custom_exception_handler' 
} 

Réfs: docs

+0

J'ai vu ça mais je n'ai pas compris comment implémenter ceci dans mon code. Alors s'il vous plaît, manipulez ceci dans mon code –

+0

ce que vous n'avez pas pu comprendre. Mettez le code mentionné ci-dessus dans n'importe quel fichier et donnez son chemin dans votre fichier settings.py –

+0

fait cela, mais maintenant montrer valueerror comme nom de module vide –