es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python – ¿Cómo realizar una lectura de datos enviados a través de POST correctamente?

Vengo de PHP y allí utilizaba algo como esto para obtener el JSON que me enviaban mediante POST:

$json = file_get_contents('php://input');
$obj = json_decode($json);

$sellerCode = $obj->{'sellerCode'};
$timezone = $obj->{'timezone'};

Ahora estoy intentando hacer algo similar en Python…

json_data = sys.stdin.read()
obj = json.loads(json_data)

sellerCode = obj['sellerCode']
timezone = obj['timezone']

He realizado algunas pruebas a través de Postman enviando el JSON relevante, pero obtengo un 403.
Ya he investigado sobre el error 403 y la solución más común que encuentro está relacionada con la importación:

from django.views.decorators.csrf import csrf_exempt

Y luego se añade el decorador @csrf_exempt antes de la función que recibirá el JSON, quedando algo como esto:

from django.http import HttpResponse
import json
import os, sys
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def enviar(request):
    json_data = sys.stdin.read()
    return HttpResponse('Ok')

¿El resultado?
Postman ya no muestra el error 403, pero ahora simplemente espera una respuesta que nunca llega.

Así que ahora no sé qué camino seguir.
Estoy convencido de que tengo un problema con ese ‘sys.stdin’. Quiero decir, es un programa muy simple y solo lo estoy probando con localhost. No sé.

¿O realmente ya tengo que enfrentarme a problemas de permisos y términos de seguridad para usar el ‘@csrf_exempt’?

Muchas gracias de antemano.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás enfrentando un error 403 mientras intentas leer datos JSON enviados a través de una solicitud POST en Python. La solución más común a este error es usar el decorador @csrf_exempt de django.views.decorators.csrf.

    Sin embargo, después de usar este decorador, ahora te enfrentas a un nuevo problema donde Postman está esperando una respuesta que nunca llega. Esto podría indicar un problema potencial con el código sys.stdin.

    Puede que quieras intentar algunos pasos de solución de problemas para acotar el problema. Por ejemplo, puedes intentar imprimir la variable json_data para ver si está recibiendo los datos correctamente. También puedes verificar si sys.stdin está cerrado o bloqueado, impidiendo la lectura de los datos.

    Con respecto a la seguridad y los permisos, la protección CSRF (falsificación de solicitudes entre sitios) es una medida de seguridad importante que no debe deshabilitarse a menos que sea necesario. Sin embargo, si estás probando localmente, debería ser seguro utilizar el decorador @csrf_exempt por ahora.

    En general, es difícil precisar el problema exacto sin más información o código, pero algunos pasos de solución de problemas e investigación adicional pueden ayudarte a resolver el problema.

Comments are closed.