Данные POST Python с использованием mod_wsgi
Это должен быть очень простой вопрос, но я, похоже, не могу понять.
Я использую apache + mod_wsgi для размещения моего приложения python, и я хотел бы получить содержимое сообщения, представленное в одной из форм - во всяком случае, ни значения среды, ни sys.stdin не содержат ни одной из этих данных. Разум дает мне быструю руку?
Изменить:
Пробовал уже:
- environ [ "CONTENT_TYPE" ] = 'application/x-www-form-urlencoded' (нет данных)
- environ [ "wsgi.input" ] кажется правдоподобным, однако, как environment [ "wsgi.input" ]. read(), так и environment [ "wsgi.input" ]. read (-1) возвращает пустую строка (да, содержимое было опубликовано, а environ [ "request_method" ] = "post"
Ответы
Ответ 1
PEP 333 говорит вы должны прочитать environment ['wsgi.input " ].
Я только что сохранил следующий код и запустил его apache mod_wsgi. Он работает.
Вы должны делать что-то неправильно.
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
Ответ 2
Помните, что технически говорящий вызов read() или read (-1) на wsgi.input является нарушением спецификации WSGI, даже если Apache/mod_wsgi позволяет это. Это связано с тем, что спецификация WSGI требует предоставления допустимого аргумента длины. Спецификация WSGI также говорит, что вы не должны читать больше данных, чем указано CONTENT_LENGTH.
Таким образом, приведенный выше код может работать в Apache/mod_wsgi, но он не является переносимым WSGI-кодом и не будет работать в некоторых других реализациях WSGI. Чтобы быть точным, определите длину содержимого запроса и укажите это значение для чтения().