POST-данные Python с использованием mod_wsgi - PullRequest
15 голосов
/ 27 декабря 2008

Это, должно быть, очень простой вопрос, но я, кажется, не могу понять.

Я использую apache + mod_wsgi для размещения своего приложения на python, и мне бы хотелось, чтобы содержимое публикации отправлялось в одной из форм - однако ни значения среды, ни sys.stdin не содержат никаких этих данных. Не могли бы вы дать мне быструю руку?

Edit: Пробовал уже:

  • environment ["CONTENT_TYPE"] = 'application / x-www-form-urlencoded' (нет данных)
  • environment ["wsgi.input"] кажется правдоподобным способом, однако, как Environment ["wsgi.input"]. Read (), так и Environment ["wsgi.input"]. Read (-1) возвращает пустой строка (да, контент был опубликован, и окружение ["request_method"] = "post"

Ответы [ 2 ]

22 голосов
/ 27 декабря 2008

PEP 333 говорит вы должны прочитать окружающую среду ['wsgi.input'] .

Я просто сохранил следующий код и заставил apache mod_wsgi запустить его. Это работает.

Вы, должно быть, делаете что-то не так.

<code>from pprint import pformat

def application(environ, start_response):
    # show the environment:
    output = ['<pre>']
    output.append(pformat(environ))
    output.append('
') # создать простую форму: output.append ('') output.append ('') output.append ('') output.append ( '') if environment ['REQUEST_METHOD'] == 'POST': # показать данные формы, полученные POST: output.append ('

ФОРМАТНЫЕ ДАННЫЕ

') output.append (pformat (окружать [ 'wsgi.input']. чтения ())) # отправить результаты output_len = сумма (len (строка) для строки в выходе) start_response ('200 OK', [('Content-type', 'text / html'), ('Content-Length', str (output_len))]) обратный вывод
13 голосов
/ 24 июня 2009

Имейте в виду, что с технической точки зрения вызов read () или read (-1) в wsgi.input является нарушением спецификации WSGI, хотя Apache / mod_wsgi это позволяет. Это связано с тем, что спецификация WSGI требует указания аргумента допустимой длины. В спецификации WSGI также говорится, что вы не должны читать больше данных, чем указано в CONTENT_LENGTH.

Итак, приведенный выше код может работать в Apache / mod_wsgi, но он не является переносимым кодом WSGI и не будет работать в некоторых других реализациях WSGI. Чтобы быть точным, определите длину содержимого запроса и укажите это значение для read ().

...