Pergunta

Eu não consigo descobrir como acessar dados POST usando WSGI. Eu tentei o exemplo no site da wsgi.org e não funcionou. Eu estou usando Python 3.0 agora. Por favor, não recomendo um quadro WSGI como isso não é o que eu estou procurando.

Eu gostaria de descobrir como obtê-lo em um objeto FieldStorage.

Foi útil?

Solução

Assumindo que você está tentando obter apenas os dados POST em um 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
)

Outras dicas

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)

Note que WSGI ainda não está totalmente especificada para Python 3.0, e grande parte da infra-estrutura WSGI popular não foi convertido (ou foi 2to3d, mas não devidamente testado). (Mesmo wsgiref.simple_server não será executado.) Você está em um momento difícil fazer WSGI em 3.0 hoje.

Isso funcionou para mim (em Python 3.0):

import urllib.parse

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

Mesmo mais curto

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

Esse código funciona em produção.

eu sugiro que você olhar como algumas estruturas de fazê-lo para um exemplo. (Eu não estou recomendando qualquer único, apenas usá-los como um exemplo.)

Aqui está o código de Werkzeug :

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

que chamadas

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

É um pouco complicado para resumir aqui, então eu não vou.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top