traductor meaning python flask

python - meaning - flask wikipedia



Obtiene el cuerpo de POST sin procesar en Python Flask independientemente del encabezado de tipo de contenido (4)

Previamente, pregunté Cómo obtener los datos recibidos en la solicitud de Flask porque request.data estaba vacío. La respuesta explicaba que request.data es el cuerpo del mensaje en bruto, pero estará vacío si se analizan los datos del formulario. ¿Cómo puedo obtener el cuerpo de publicación sin procesar incondicionalmente?

@app.route(''/'', methods=[''POST'']) def parse_request(): data = request.data # empty in some cases # always need raw data here, not parsed form data


Acabo de tener este problema, y ​​creo que algunos de ustedes podrían beneficiarse de mi solución. Creé una clase de middleware de WSGI que guarda el cuerpo de POST en bruto del socket. Guardé el valor en la variable WSGI ''environ'' para poder referirme a él como request.environ [''body_copy''] dentro de mi aplicación Flask.

Debes tener cuidado de que los datos de la publicación no sean demasiado grandes o de que tengas problemas de memoria en tu servidor.

class WSGICopyBody(object): def __init__(self, application): self.application = application def __call__(self, environ, start_response): from cStringIO import StringIO length = environ.get(''CONTENT_LENGTH'', ''0'') length = 0 if length == '''' else int(length) body = environ[''wsgi.input''].read(length) environ[''body_copy''] = body environ[''wsgi.input''] = StringIO(body) # Call the wrapped application app_iter = self.application(environ, self._sr_callback(start_response)) # Return modified response return app_iter def _sr_callback(self, start_response): def callback(status, headers, exc_info=None): # Call upstream start_response start_response(status, headers, exc_info) return callback app.wsgi_app = WSGICopyBody(app.wsgi_app) request.environ[''body_copy''] # This is the raw post body you can use in your flask app


Finalmente descubrí si hago esto:

request.environ[''CONTENT_TYPE''] = ''application/something_Flask_ignores''

Entonces request.data realidad tendrá los datos de la publicación. Esto es así si no puede controlar la solicitud del cliente y desea anularla en el servidor.


Hay request.stream cuando el tipo de mime no se reconoce.

data = request.stream.read()


Utilice request.get_data() para obtener los datos sin formato, independientemente del tipo de contenido. Los datos se almacenan en caché y posteriormente puede acceder request.data , request.json , request.form a voluntad.

Si accede request.data primero, llamará a get_data con un argumento para analizar primero los datos del formulario. Si la solicitud tiene un tipo de contenido de formulario ( multipart/form-data , application/x-www-form-urlencoded , o application/x-url-encoded ), los datos brutos se consumirán. request.data y request.json aparecerán vacíos en este caso.