Estoy tratando de devolver un valor de una función Ver en Django. Esa función se llama desde un código JavsScript usando Ajax, pero aparece un error que dice "Prohibido (falta el token CSRF o es incorrecto)".
El código HTML se parece a esto:
<div align="center" class="input-line"> <form class="input-form" method="post">{% csrf_token %} <input type = "text" id = "ans" class = "form-control" name = "address" placeholder="Type postcode..."><br><br> <button id = "homeBtn" class="btn btn-primary">Find info</button><br><br> </form> </div>La función de vista es:
def result(request): if(request == 'POST'): param = request.form['my data'] this = runAreaReview(param) #This returns a string return HttpResponse(this)Método 1
Para realizar solicitudes de publicación con ajax, debe establecer un encabezado llamado HTTP_X_CSRFTOKEN y establecer su valor en una cookie que se almacena en el navegador con el nombre csrftoken . referencia entonces en tu llamada ajax, deberías hacer algo como esto.
var csrftoken = Cookies.get('csrftoken'); $.ajax( ... headers:{"HTTP_X_CSRF_TOKEN":csrftoken} );también tenga en cuenta que si está utilizando algún servidor proxy inverso con algo como nginx, asegúrese de enviar este encabezado también a la aplicación django.
método 2
puede deshabilitar la verificación csrf para esta vista específica usando una anotación. Referencia
from django.views.decorators.csrf import csrf_exempt @csrf_exempt def result(request): ...método 3
El siguiente método NO SE RECOMIENDA por razones de seguridad
Siempre puede desactivar el middleware csrf en la configuración para deshacerse de él si solo está creando algo con fines recreativos y no para producción.
para cualquiera que se encuentre con este hilo, la clave HEADER debe ser X-CSRFToken como para Django 2.1, los enlaces van aquí https://docs.djangoproject.com/en/2.1/ref/csrf/