1

Lors de l'utilisation d'un UUID mal formé dans django-rest-framework, le serveur lève une exception et renvoie le code d'état 500. L'exception ValueError 'chaîne UUID hexadécimale mal formée' n'est pas gérée.Comment gérer python django rest-framework-api malformé UUID au lieu de 500?

Il est plus logique de le manipuler correctement et renvoyer un code d'état 400.

J'ai réussi à le faire avec un gestionnaire d'exception personnalisée, mais il est une solution vraiment malpropre et laid.

J'ai pensé à le faire avec un sérialiseur personnalisé, mais je ne savais pas comment gérer cela correctement et si c'est la bonne approche django.

Qu'en pensez-vous?

Cheers.

Répondre

0

J'ai résolu cela en remplaçant le ViewSet car il est responsable de l'obtention de l'objet avant de le passer au sérialiseur. Pour convience, j'ai créé UUIDViewSetMixin pour l'ajouter aux ensembles de vues souhaités.

class UUIDViewSetMixin(object): 
    lookup_field = 'id' 

    def get_object(self): 
     value = self.kwargs.get(self.lookup_field) 
     try: 
      uuid.UUID(value) 
     except ValueError: 
      result = { 
       'code': 'bad_request', 
       'message': _("'%(value)s' is not a valid uuid") % {'value', value} 
      } 
      return JsonResponse(data=data, request=status=status.HTTP_400_BAD_REQUEST) 
     return super(UUIDViewSetMixin, self).get_object() 
+0

C'était ma première pensée, mais je préférerais une solution de projet global plus générique –