Seite 1 von 1

PythonCode optimieren

Verfasst: Mittwoch 13. Juli 2011, 16:27
von Hawelka
Hallo Leute!

Da ich kein Python-Entwickler bin, bitte ich um Nachsicht für mein vielleicht etwas natives Anliegen.

Ich würde gerne die via WSGI übermittelten Daten in eine Key/Value-Form bringen.
Im speziellen geht es mir um die als POST-Data überlieferten Informationen.
Dabei kann ja ein Key mehrmals vorkommen.
Ziel ist es letztendlich, dass ich sämtliche Daten (environment und Post-data) als String erhalte, wobei Name und Value durch <tab> getrennt sind und <LF> die einzelnen Felder abschließen.
Hier mal mein Ansatz:

Code: Alles auswählen

def application(environ, start_response):

    get_data = []
    post_data = ''

    # stringifying the environment key, value pairs
    get_data = ['%s\t%s' % (key, value)
                     for key, value in environ.items()]
    get_data = '\n'.join(get_data)

    # in the HTTP request body which is passed by the WSGI server
    # in the file like wsgi.input environment variable.
    if environ['REQUEST_METHOD'] == 'POST':
        # the environment variable CONTENT_LENGTH may be empty or missing
        try:
            length = int(environ.get('CONTENT_LENGTH', 0))
        except (ValueError):
            length = 0

        request_body = environ['wsgi.input'].read(length)
        d = parse_qs(request_body)

        post_data = ''
        for key, value in d.items():
            for v in value:
                post_data += key + '\t' + v + '\n'

    output = get_data + '\n' + post_data
So weit funktioniert das auch - das script erscheint mir aber nicht wirklich python-like. Vor allem jener Teil, wo ich versuche die Post-Data (wsgi.input) in die genannte Form zu bringen.
Könnt ihr so nett sein, und euch das kritisch ansehen?

Vielen Dank schon jetzt mal!
Hawelka

Re: PythonCode optimieren

Verfasst: Mittwoch 13. Juli 2011, 16:52
von deets
Ich wuerde dir dringend anraten, ein Zusatzmodul wie webob zu benutzen. Damit kannst du komfortabel vom direkten WSGI-environment abstrahieren und bekommst zB alle Parameter in Form eines MultiDicts - dein Code wird dadurch deutlich kompakter, und du musst dich nicht mit Details von HTTP auseinandersetzen. Zum Beispiel fliegt dein Code auseinander, wenn der POST-body in multipart/form-encoded vorliegt.

Re: PythonCode optimieren

Verfasst: Mittwoch 13. Juli 2011, 17:38
von Hawelka
deets hat geschrieben:Ich wuerde dir dringend anraten, ein Zusatzmodul wie webob zu benutzen. Damit kannst du komfortabel vom direkten WSGI-environment abstrahieren und bekommst zB alle Parameter in Form eines MultiDicts - dein Code wird dadurch deutlich kompakter, und du musst dich nicht mit Details von HTTP auseinandersetzen. Zum Beispiel fliegt dein Code auseinander, wenn der POST-body in multipart/form-encoded vorliegt.
Vielen Dank für diesen Hinweis!
Ist ja Wahnsinn, welche Libraries python hier bietet.