Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

322
Visualizações
Falta el token CSRF de Django solo en producción

Recibo un error de CSRF_Token faltante que solo ocurre en el modo de producción en mi servidor. Sin embargo, todo funciona muy bien cuando lo ejecuto desde la terminal de mi computadora usando el comando runserver. He leído muchas de las otras preguntas relacionadas con esto sin suerte. Parece que mi caso es un poco diferente a otros, ya que funciona localmente pero no en producción.

Recibo el error al enviar un formulario Ajax que se envía a "enviar" en views.py. ¿Alguien sabe qué podría estar causando esto? Además, al mirar mis cookies en el modo de producción, el CSRF_Token ni siquiera está allí para empezar. Localmente lo es. Gracias por cualquier ayuda.

Aquí está mi vista.py

 from django.shortcuts import render from django.http import HttpResponse def index(request): return render(request, 'index.html') def submit(request): #Receive Request inputone = request.POST['randominfo'] inputtwo = request.POST['randominfo2'] #Some more code here that setups response. #Deleted since Im posting to StackOverflow return response

Código relacionado con el envío de Ajax

 $(function () { $.ajaxSetup({ headers: { "X-CSRFToken": getCookie("csrftoken") } }); }); function getCookie(c_name) { if (document.cookie.length > 0) { c_start = document.cookie.indexOf(c_name + "="); if (c_start != -1) { c_start = c_start + c_name.length + 1; c_end = document.cookie.indexOf(";", c_start); if (c_end == -1) c_end = document.cookie.length; return unescape(document.cookie.substring(c_start,c_end)); } } return ""; } function submitAjax(event){ $.ajax({ type:'POST', url:'/submit/', data:{ randominfo:document.getElementById('Random').innerHTML, randominfo2:document.getElementById('Random2').innerHTML, }, dateType: 'json', success:function() { # Url here } }) };

Solución que solucionó este problema.

Agregando "desde django.views.decorators.csrf importsure_csrf_cookie" en views.py y luego "@ensure_csrf_cookie" arriba de la vista que devuelve el archivo html que contenía el formulario ajax

about 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

El error ocurre porque no está configurando el token csrf, para evitar esto, debemos verificar algunos detalles

En primer lugar, debe configurar el token csrf en su formulario, en su html debe configurar algunos de la siguiente manera:

 <form id="id" name="form"> {% csrf_token %} <!-- Form body here --> </form>

En segundo lugar, el enfoque para configurar la cookie csrf en el encabezado de su solicitud está bien, solo sugiero que, en su lugar, configure su campo de datos uno por uno, use el método de serialize de jquery

data: $("#your-form-id").serialize()

Me gustaría recomendarle que lea esta publicación sobre la solicitud de ajax con django que es muy útil

about 4 years ago · Santiago Trujillo Relatório

0

Hay 2 cosas que puedes hacer:

1.) Envíe un token CSRF en su llamada ajax. Tienes que usar una función javascript getCookie() para obtenerlo. Afortunadamente, la documentación de django tiene un código que puedes copiar y pegar. javascript

 $.ajax({ type:'POST', url:'/submit/', data:{ randominfo:document.getElementById('Random').innerHTML, randominfo2:document.getElementById('Random2').innerHTML, 'csrfmiddlewaretoken': getCookie('csrftoken'), // add this ...

2.) Deshabilite csrf para su vista /submit. Puedes hacer esto con un decorador. Tenga en cuenta que esto es menos seguro, así que asegúrese de que no haya datos confidenciales.

vistas.py:

 from django.views.decorators.csrf import csrf_exempt ... @csrf_exempt def your_submit_view(request): #view code
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda