Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

168
Vistas
Obtener datos de publicación de API que no se reciben en la vista de Django

¿Qué estoy tratando de hacer?

Estoy tratando de enviar una solicitud de publicación con datos a una vista de Django usando una API de búsqueda como esta:

JavaScript:

 const data = { search_text: "", months: 6, property_type: "all" }; const headers = { 'Accept': 'application/json', 'Content-Type':'application/json', 'X-Requested-With':'XMLHttpRequest' } fetch("some-url", {method: "POST", headers: headers, body: JSON.stringify(data)}) .then((response) => response.json()) .then((data) => console.log(data));

vistas.py:

 class MyView(View): def post(self, request, *args, **kwargs): print("request: ", request.POST) # do stuff with post data

urls.py:

 re_path(r"^my_view/$", login_required(csrf_exempt(MyView.as_view())), name="my_view"),

Problema

Cuando trato de acceder a los datos de la publicación en mi vista de Django, obtengo QueryDict vacío y el resultado de la terminal es este:

 request: <QueryDict: {}> [06/Jan/2022 06:48:19] "POST /my_app/my_view/ HTTP/1.1" 200 114 Forbidden (CSRF token missing or incorrect.): /inbox/notifications/api/unread_list/ [06/Jan/2022 06:48:22] "{"search_text":"","months":"6","property_type":"all"}GET /inbox/notifications/api/unread_list/?max=5 HTTP/1.1" 403 12291

Si nota que en la última línea los datos de la publicación parecen agregarse en la terminal, ¿por qué sucede eso? ¿También por qué obtengo Prohibido (falta el token CSRF o es incorrecto) incluso cuando estoy usando csrf_exempt en las URL?

He intentado buscarlo y nada parece funcionar. Estamos usando reaccionar y sé que axios también se puede usar, pero debería funcionar con la API de recuperación. ¿Por qué no funciona? Por favor, ayuda.

Editar:

Incluso después de agregar el token csrf como se menciona en los documentos y eliminar csrf_exempt de las direcciones URL, sigo teniendo el mismo problema.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Esto se debe a que su vista está protegida por un CSRF -protection-middleware.

Tienes dos posibilidades:

  • Haga que la vista esté exenta de esta protección, consulte csrf_exempt
  • Agregue el token CSRF a su solicitud (consulte la respuesta de Yevgeniy Kosmak)
about 4 years ago · Juan Pablo Isaza Denunciar

0

De acuerdo, solucionó el problema, parece que los datos que estaba buscando no estaban en request.POST , sino en request.body hizo los siguientes cambios:

 import json class MyView(View): def post(self, request, *args, **kwargs): print("request: ", json.loads(request.body)) # do stuff with post data

request.body devuelve una cadena de bytes, por lo que debe convertir eso a json con json.loads para obtener más información, lea los documentos

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda