Frage

Ich kann nicht scheinen, um herauszufinden, wie POST-Daten für den Zugriff auf WSGI verwenden. Ich habe versucht, das Beispiel auf der wsgi.org Website und es hat nicht funktioniert. Ich verwende Python 3.0 jetzt. Bitte keinen WSGI Rahmen empfehlen, wie das ist nicht das, was ich suche.

Ich möchte herausfinden, wie es in einem Field Objekt zu erhalten.

War es hilfreich?

Lösung

Angenommen, Sie nur die POST-Daten in ein Field Objekt zu erhalten versuchen:

# 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
)

Andere Tipps

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)

Beachten Sie, dass WSGI ist noch nicht vollständig spezifiziert für Python 3.0, und ein großer Teil der beliebten WSGI Infrastruktur nicht umgesetzt worden ist (oder hat 2to3d, aber nicht richtig getestet). (Sogar wsgiref.simple_server nicht ausgeführt werden.) Sie sind in für eine harte Zeit heute WSGI auf 3.0 zu tun.

Das ist für mich gearbeitet (in Python 3.0):

import urllib.parse

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

Noch kürzere

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

Dieser Code funktioniert in der Produktion.

Ich würde vorschlagen, Sie schauen, wie einige Frameworks es tun für ein Beispiel. (Ich bin kein einzigen empfehlen, nur um sie als Beispiel).

Hier ist der Code von Werkzeug :

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

, welche Anrufe

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

Es ist ein bisschen hier zusammenzufassen kompliziert, so werde ich nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top