Tener un API POST'able y de Django CSRF Middleware
Pregunta
Tengo una aplicación web Django que tiene tanto un front-end, componente accesible desde la web y una API que se accede por un cliente de escritorio. Sin embargo, ahora con el nuevo componente middleware CSRF, solicitudes de API del cliente de escritorio que son POST'ed obtienen un 403.
entiendo por qué ocurre esto, pero ¿cuál es la forma correcta de arreglar esto sin comprometer la seguridad? ¿Hay alguna manera que puede ser señal en la cabecera HTTP que se trata de una solicitud de API y que Django no se debe comprobar para CSRF o es que una mala estrategia?
Editar -
El método que estoy usando en este momento es que el cliente de escritorio establece un encabezado, X-solicitada-Con: XMLHttpRequest. Esto es un poco hacky, pero no estoy seguro de cómo se manejaría mejor.
Solución
¿Qué tal disociación de una vista (s) de tu cliente de escritorio y decorarlas con csrf_exempt ?
Otros consejos
Si está utilizando una vista basada Clase continuación, tendrá que csrf_exempt el método de despacho en lugar del método post como este:
@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
return super(MyView, self).dispatch(request, *args, **kwargs)
Vea este billete de errores: https://code.djangoproject.com/ticket/15794
Desde Django 1.1, el código CSRF permitirá automáticamente peticiones AJAX para pasar a través, ya que los navegadores parecen hacer los controles de seguridad adecuados. Aquí está el original de cometer y la documentación .