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

172
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 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