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.

Cómo acceder a los datos del cuerpo de la solicitud WSGIRequest?

Quiero obtener los datos recibidos de una solicitud URL, pero no puedo acceder a ellos, aquí está mi código:

def save_stripe_info(request):
    data = request.body
    email = data[0]
    payment_method_id = data[1]
    print('mail=> ', email, '  i=> ', payment_method_id, 'hello => ', data)
    # algún código

Está imprimiendo la siguiente salida:

mail=>   45   i=>   45 hello =>   b'------WebKitFormBoundary2ndFleWNwV9sa24C\r\nContent-Disposition: form-data; name="email"\r\n\r\ntesti@gmail.com\r\n------WebKitFormBoundary2ndFleWNwV9sa24C\r\nContent-Disposition: form-data; name="payment_method_id"\r\n\r\npm_1K5wvrBbWBJ638dRyJJeYjnL\r\n------WebKitFormBoundary2ndFleWNwV9sa24C--\r\n'

Y si intento email = data[email], obtengo un error que dice que los índices de la lista deben ser números enteros.

¿Cómo puedo obtener el correo electrónico (email) y el ID del método de pago (payment_method_id) de la solicitud?

También intenté:

body_unicode = request.body.decode('utf-8')
body = json.loads(body_unicode)
content = body['email']

Pero esto está dando un error json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Tags:  ,

Answer

  1. Avatar for davy.ai

    Los datos recibidos de la solicitud URL están en forma de form-data. Por lo tanto, el cuerpo de la solicitud debe ser decodificado y analizado en pares clave-valor.

    Aquí tienes un fragmento de código actualizado para obtener el correo electrónico (email) y el ID del método de pago (payment_method_id) del cuerpo de la solicitud:

    import json
    
    def save_stripe_info(request):
        body_unicode = request.body.decode('utf-8')
        body = dict(x.split("=") for x in body_unicode.split("&"))
        email = body.get('email')
        payment_method_id = body.get('payment_method_id')
        print('email => ', email, ' payment_method_id => ', payment_method_id, ' data => ', body)
        # some code
    

    En el código actualizado, el cuerpo de la solicitud primero se decodifica utilizando la codificación utf-8. Luego, se divide en & para crear una lista de pares clave-valor. Finalmente, se crea un diccionario a partir de estos pares utilizando una comprensión de diccionario.

    Usando el método get(), los valores de email y payment_method_id pueden ser fácilmente obtenidos del diccionario.

    Ten en cuenta que se produjo el error json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) porque el cuerpo de la solicitud no está en formato JSON. Por lo tanto, al decodificarlo usando el método json.loads(), se produjo un error.

Comments are closed.