Accediendo a los datos POST desde WSGI

Parece que no puedo averiguar cómo acceder a los datos de la POST utilizando WSGI. Probé el ejemplo en el sitio web wsgi.org y no funcionó. Estoy usando Python 3.0 en este momento. Por favor, no recomiende un marco WSGI ya que no es lo que estoy buscando.

Me gustaría averiguar cómo introducirlo en un objeto de almacenamiento de campo.

Suponiendo que está intentando obtener solo los datos POST en un objeto FieldStorage:

# env is the environment handed to you by the WSGI server. # I am removing the query string from the env before passing it to the # FieldStorage so we only have POST data in there. post_env = env.copy() post_env['QUERY_STRING'] = '' post = cgi.FieldStorage( fp=env['wsgi.input'], environ=post_env, keep_blank_values=True ) 
 body= '' # b'' for consistency on Python 3.0 try: length= int(environ.get('CONTENT_LENGTH', '0')) except ValueError: length= 0 if length!=0: body= environ['wsgi.input'].read(length) 

Tenga en cuenta que WSGI aún no está totalmente especificado para Python 3.0, y que gran parte de la infraestructura WSGI popular no se ha convertido (o ha sido 2to3d, pero no se ha probado correctamente). (Incluso wsgiref.simple_server no se ejecutará.) Te espera un tiempo difícil para hacer WSGI en 3.0 hoy.

Esto funcionó para mí (en Python 3.0):

 import urllib.parse post_input = urllib.parse.parse_qs(environ['wsgi.input'].readline().decode(),True) 

Aun mas corto

 l = int(env.get('CONTENT_LENGTH')) if env.get('CONTENT_LENGTH') else 0 body = env['wsgi.input'].read(l) if l > 0 else '' 

Este código funciona en producción.

Le sugiero que mire cómo algunos marcos lo hacen por ejemplo. (No estoy recomendando uno solo, solo los uso como ejemplo).

Aquí está el código de Werkzeug :

http://dev.pocoo.org/projects/werkzeug/browser/werkzeug/wrappers.py#L150

que llama

http://dev.pocoo.org/projects/werkzeug/browser/werkzeug/utils.py#L1420

Es un poco complicado resumir aquí, así que no lo haré.