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

175
Vistas
Django: tomando valores de la solicitud POST, API de recuperación de JavaScript

Lo siento si esta es una pregunta de novato, estoy creando una aplicación Django y para eso estoy tratando de acceder a los datos recibidos de la solicitud POST, usando la API de recuperación de JavaScript, pero se muestra vacío. No puedo entender cuál es mi error. He intentado eliminar todas las partes innecesarias para depurar. El error está en esta parte:

Código de mis views.py

 def checkdb(request): if request.method == "POST": a = request.POST.get('tag', 'default') print("printing", a) print(request.POST) return HttpResponse("Hello") def check(request): return render(request, 'shop/new.html')

Código de URLS.py

 urlpatterns = [ path('', views.index, name="shop"), path('checkdb/', views.checkdb, name="checkdb"), path('check/', views.check, name="check"), ]

Código de new.html , solo tiene una etiqueta de secuencia de comandos para obtener la solicitud solo con fines de prueba.

 <script> data = JSON.stringify({ headline: "Testing", tag: "Testing", background_image: "Testing", content: "Testing", user: 1 }) let csrftoken = getCookie('csrftoken'); let response = fetch("/shop/checkdb/", { method: 'POST', body: data, headers: { 'Accept': 'application/json, text/plain, */*', 'Content-Type': 'application/json', "X-CSRFToken": csrftoken }, }) function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie !== '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = cookies[i].trim(); if (cookie.substring(0, name.length + 1) === (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } </script>

Cuando voy a la tienda/comprobación del punto final, se ejecuta su etiqueta de secuencia de comandos y no hay ningún error en la consola, pero cuando intento imprimir los datos recibidos en la terminal, siempre imprime la opción predeterminada. No obtengo el error. Quiero imprimir los datos. correspondiente a la tecla "etiqueta" que es "Prueba" pero está dando la opción predeterminada Por favor, ayúdenme a encontrar mi error.

SALIDA en terminal

 Quit the server with CTRL-BREAK. [01/May/2020 19:09:02] "GET /shop/check/ HTTP/1.1" 200 1091 printing default <QueryDict: {}> [01/May/2020 19:09:02] "POST /shop/checkdb/ HTTP/1.1" 200 5

Estoy usando Django 3.0.4.

Gracias y perdón si hay algún error tonto, soy un novato en Django

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

En mi experiencia, los datos enviados mediante fetch no se encuentran dentro de request.POST sino dentro de request.body . Luego, hay casos en los que los datos recibidos están en bytes, por lo que primero deberá decodificarlos. Te sugiero que hagas esto primero:

 if request.method == "POST": import json post_data = json.loads(request.body.decode("utf-8"))

Luego intente acceder al contenido de post_data como un diccionario de Python normal para obtener el valor de la tag como en post_data.get("tag")

over 4 years ago · Santiago Trujillo Denunciar

0

Según mi solicitud de investigación. POST no funcionará, solo funciona cuando hay datos de formulario, resolví mi problema de acceder a los datos usando

 data = json.loads(request.body.decode("utf-8")) tag = data['tag'] print(data) print(tag)

Y para usar json.loads() primero debe import json .

over 4 years ago · Santiago Trujillo Denunciar

0

Según la documentación :

json.loads() Deserialize s (una instancia de str, bytes o bytearray que contiene un documento JSON) a un objeto de Python utilizando esta tabla de conversión.

Los datos dentro de request.body son de tipo bytes . Como json.loads ya acepta el tipo de datos de bytes , no necesitamos decode . Entonces, simplemente podemos escribir:

 data = json.loads(request.data) print(data) # We get data as a dictionary
over 4 years ago · Santiago Trujillo 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