¿Cómo puedo establecer el tipo de contenido aceptado en una vista de Django?
Tengo algunas vistas creadas en Django. Me he dado cuenta de que los endpoints no fallan con un tipo de medio no admitido si los llamo, por ejemplo, con datos binarios en lugar de json (solo aceptan json). Entonces, mi duda es: ¿cómo puedo especificar el tipo de contenido permitido de un endpoint en Django para que devuelva un código de error 415? ¿Necesito implementar esa lógica manualmente con un middleware?
davy.ai
Para especificar el tipo de contenido permitido de un endpoint en Django y hacer que retorne un código de error 415, puedes utilizar el Middleware incorporado de Django llamado
django.middleware.common.CommonMiddleware
. Este middleware ya incluye un manejo básico de encabezados HTTP, incluyendo el encabezadoContent-Type
.Para usar este middleware, debes agregarlo a la configuración
MIDDLEWARE
en el archivosettings.py
de tu proyecto de Django, de la siguiente manera:Luego, en tus vistas o viewsets que acepten datos JSON, puedes agregar el siguiente decorador para hacer cumplir el tipo de contenido:
Este decorador verifica si el tipo de contenido de la solicitud es
application/json
. Si no lo es, devuelve un código de error 400 con un mensaje.Alternativamente, podrías utilizar el paquete
django-rest-framework
, que incluye un analizador incorporado que genera un código de error 415 si el tipo de contenido de la solicitud no es compatible. Para utilizarlo, necesitas instalar el paquete y agregar lo siguiente a tu vista:Este decorador establece la clase de analizador de la vista como JSONParser, que está incluido en el paquete
django-rest-framework
, y genera un código de error 415 si el tipo de contenido de la solicitud no esapplication/json
.