wsgidaemonprocess - Datos POST de Python usando mod_wsgi
wsgidaemonprocess example (2)
Esta debe ser una pregunta muy simple, pero parece que no puedo entenderlo.
Estoy usando apache + mod_wsgi para alojar mi aplicación Python, y me gustaría que el contenido de la publicación sea enviado en uno de los formularios; sin embargo, ni los valores del entorno ni sys.stdin contienen ninguno de estos datos. ¿Me das una mano rápida?
Editar: Probado ya:
- environ ["CONTENT_TYPE"] = ''application / x-www-form-urlencoded'' (sin datos)
- environ ["wsgi.input"] parece una forma plausible, sin embargo, tanto environ ["wsgi.input"]. read (), y environ ["wsgi.input"]. read (-1) devuelve una cadena vacía (sí , el contenido se ha publicado y environ ["request_method"] = "post"
PEP 333 dice que debe leer environ [''wsgi.input''] .
Acabo de guardar el siguiente código e hice que mod_wsgi de apache lo ejecutara. Funciona.
Debes estar haciendo algo mal.
from pprint import pformat
def application(environ, start_response):
# show the environment:
output = [''<pre>'']
output.append(pformat(environ))
output.append(''</pre>'')
#create a simple form:
output.append(''<form method="post">'')
output.append(''<input type="text" name="test">'')
output.append(''<input type="submit">'')
output.append(''</form>'')
if environ[''REQUEST_METHOD''] == ''POST'':
# show form data as received by POST:
output.append(''<h1>FORM DATA</h1>'')
output.append(pformat(environ[''wsgi.input''].read()))
# send results
output_len = sum(len(line) for line in output)
start_response(''200 OK'', [(''Content-type'', ''text/html''),
(''Content-Length'', str(output_len))])
return output
Tenga en cuenta que técnicamente hablando, llamar a read () o read (-1) en wsgi.input es una violación de la especificación WSGI aunque Apache / mod_wsgi lo permita. Esto se debe a que la especificación WSGI requiere que se proporcione un argumento de longitud válido. La especificación WSGI también dice que no debe leer más datos de los especificados por CONTENT_LENGTH.
Por lo tanto, el código anterior puede funcionar en Apache / mod_wsgi pero no es un código WSGI portátil y fallará en algunas otras implementaciones de WSGI. Para ser correcto, determine la longitud del contenido de la solicitud y suministre ese valor a read ().