PythonCode optimieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Hawelka
User
Beiträge: 2
Registriert: Sonntag 10. Juli 2011, 09:33

Mittwoch 13. Juli 2011, 16:27

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
Zuletzt geändert von Anonymous am Mittwoch 13. Juli 2011, 18:44, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
deets

Mittwoch 13. Juli 2011, 16:52

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.
Hawelka
User
Beiträge: 2
Registriert: Sonntag 10. Juli 2011, 09:33

Mittwoch 13. Juli 2011, 17:38

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.
Antworten