Hallo Forum,
Für einen (sehr) kleinen lokalen Testserver hab ich versucht den WSGI-Demoserver anzupassen.
Nur beim Zugriff auf Formulardaten komm ich einfach nicht weiter.
Ich habs mit dem CGI-Modul versucht,
mit den WSGI-Bordmitteln..
..aber ich kriegs einfach nicht hin..
Danke im vorraus,
Jorn
[solved] WSGI ohne Framework POST Formulardaten auslesen
Hallo veers,
Danke für die schnelle Hilfe.
Ich hab mal
Was muss ich jetzt noch ändern ?
( Im "handle_request" habs ichs nicht hinbekommen )
Danke,
Jorn
Danke für die schnelle Hilfe.
Ich hab mal
eingebaut..
Was muss ich jetzt noch ändern ?
( Im "handle_request" habs ichs nicht hinbekommen )
Danke,
Jorn
Zuletzt geändert von Jorn am Samstag 18. August 2007, 18:43, insgesamt 5-mal geändert.

Ich hab den Code mal geändert (s.u.).
Ich weiss nur einfach nicht wo ich "get_post_form" feuern soll..
( damit auch was ankommt )
Danke,
Jorn
Zuletzt geändert von Jorn am Samstag 18. August 2007, 18:43, insgesamt 1-mal geändert.
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
get_post_form(environ) << du verwirfst den Rückgabewert ja auch, das wäre deine cgi.FieldStorage 
Aber mal einen Tip: Wenn du so Probleme damit hast, fang doch mit einem Framework an, ist einfacher

Aber mal einen Tip: Wenn du so Probleme damit hast, fang doch mit einem Framework an, ist einfacher

Ok,
Hab den Rückgabewert jetzt mal reingeschrieben (s.u.),
da kommt nach wie vor nichts an.
Ich vermutete das ..
..mir das ganze sowieso in die "environ" speichern würde .. ???
Zu den Frameworks:
Mir gefiel der Gedanke einen portablen, lokalen
Miniserver in einem Skript unterzubringen..
..welches dann auch nicht die Installation eines Frameworks vorraussetzt.
Ich benötige weder Templates noch Javaskript/AJAX,
Cookies, Sessions, Externe Server .. was auch immer
und fände es auch praktischer wenn so ein Framework auf einem anderen Rechner
nicht erst installiert werden müsste.
Für meine Zwecke würde das Ganze ja schon völlig reichen,
es muss eben nur noch die Sache mit den Formularen funktionieren..
(maximal vielleicht noch ein Dateiupload)
@YOGI:
Meinst Du mit der Abstraktion ein Framework ?
(Wenn Nein - Was dann ?)
Danke,
Jorn
Hab den Rückgabewert jetzt mal reingeschrieben (s.u.),
da kommt nach wie vor nichts an.
Ich vermutete das ..
Code: Alles auswählen
environ['wsgi.post_form'] = post_form
environ['wsgi.input'] = new_input
Zu den Frameworks:
Mir gefiel der Gedanke einen portablen, lokalen
Miniserver in einem Skript unterzubringen..
..welches dann auch nicht die Installation eines Frameworks vorraussetzt.
Ich benötige weder Templates noch Javaskript/AJAX,
Cookies, Sessions, Externe Server .. was auch immer
und fände es auch praktischer wenn so ein Framework auf einem anderen Rechner
nicht erst installiert werden müsste.
Für meine Zwecke würde das Ganze ja schon völlig reichen,
es muss eben nur noch die Sache mit den Formularen funktionieren..
(maximal vielleicht noch ein Dateiupload)
@YOGI:
Meinst Du mit der Abstraktion ein Framework ?
(Wenn Nein - Was dann ?)
Danke,
Jorn
Zuletzt geändert von Jorn am Sonntag 19. August 2007, 11:37, insgesamt 1-mal geändert.
Hallo und Danke nochmal,
hab mir soeben web.py runtergeladen und mal ein Beipiel mit Formular zum Laufen gebracht.
Obwohl "minimalistisch" sind das dennoch einige Dateien unter /web ..
( wobei ich mich auch frage ob der mir fehlende Teil nun in CherryPy oder einer der anderen Dateien steckt.. ? )
Werd´ das mal weiter durchprobieren.
Zu dem EGG:
Dann müsste ich´s ja entpacken bevor ich editieren kann, oder ?
Jorn
hab mir soeben web.py runtergeladen und mal ein Beipiel mit Formular zum Laufen gebracht.
Obwohl "minimalistisch" sind das dennoch einige Dateien unter /web ..
( wobei ich mich auch frage ob der mir fehlende Teil nun in CherryPy oder einer der anderen Dateien steckt.. ? )
Werd´ das mal weiter durchprobieren.
Zu dem EGG:
Dann müsste ich´s ja entpacken bevor ich editieren kann, oder ?
Jorn
Zuletzt geändert von Jorn am Sonntag 19. August 2007, 11:41, insgesamt 1-mal geändert.
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
Jaein, es ist grundsätzlich möglich einzelne Dateien in einem ZIP zu bearbeiten. Wie das dann mit der Fragmentation etc. aussieht weis ich nicht. Aber du musst ja nicht alles in Eggs verpacken, nur die Libraries, der eigentliche Code kann ja auch ausserhalb sein.
OK,
habs endlich hinbekommen.
Hier also das fertige Skript:
Nochmal vielen Dank für die Hilfe !
Jorn
habs endlich hinbekommen.
Hier also das fertige Skript:
Code: Alles auswählen
# -*- coding: cp1252 -*-
from wsgiref.simple_server import ServerHandler, WSGIRequestHandler, make_server, WSGIServer
from wsgiref.handlers import *
from wsgiref.util import *
from BaseHTTPServer import *
import urllib, sys
import cgi
def hello_world(environ, start_response):
def get_post_form(environ):
if (environ['REQUEST_METHOD'].upper() == 'POST'):
input = environ['wsgi.input']
post_form = environ.get('wsgi.post_form')
if (post_form is not None
and post_form[0] is input):
return post_form[2]
environ.setdefault('QUERY_STRING', '') # This must be done to avoid a bug in cgi.FieldStorage
fs = cgi.FieldStorage(fp=input, environ=environ, keep_blank_values=1)
new_input = InputProcessed()
post_form = (new_input, input, fs)
environ['wsgi.post_form'] = post_form
environ['wsgi.input'] = new_input
test = post_form[1]
return fs
class InputProcessed(object):
def read(self, *args):
raise EOFError('The wsgi.input stream has already been consumed')
readline = readlines = __iter__ = read
get_post_form(environ)
sektion = ""
sektion = shift_path_info(environ)
out = ""
# Startseite
if sektion == "":
out += "<title>PostForm</title>\n\n"
out += '\t<form method="post" action="receiver.htm" name="postform" enctype="application/x-www-form-urlencoded">\n'
out += '\t\t<input type=text name="formtext1"><br>\n'
out += '\t\t<input type=text name="formtext2"><br>\n'
out += '\t\t<input type=submit name="bsenden" value=senden>\n'
out += "\t</form>"
start_response('200 OK', [('Content-Type', 'text/html')])
return [out]
elif sektion == "receiver.htm":
form = environ.get('wsgi.post_form')
out += "<title>Receiver</title>\n\n"
out += str(form)
start_response('200 OK', [('Content-Type', 'text/html')])
return [out]
print "Starte Server"
srv = make_server('', 80, hello_world, WSGIServer, WSGIRequestHandler)
import webbrowser
webbrowser.open('http://localhost:80/')
srv.handle_request(); srv.handle_request();
# srv.serve_forever()
print "Server Runtergefahren"
Jorn
Mit Abstraktion meine ich die Verwendung einer bestehenden Bibliothek, die die eigentliche Implementierung der WSGI-Schnittstelle für dich übernommen hat. In der Regel hast du dann Klassen für Request und Response, über die du dann Ein- und Ausgabe deiner Anwendung ansprechen kannst.
Da wäre z.B. Paste, das allerdings einen ganzen Haufen Sachen mitbringt, die du alleine dafür möglicherweise bei weitem nicht benötigst. Deutlich schlanker ist da blackbirds Werkzeug, das aber leider noch nicht im Käseladen verfügbar ist *HINT, HINT*.
Möglicherweise ideal ist WebOb, eine Extraktion und Weiterentwicklung/Verbesserung eben genau der Request- und Response-Klassen aus Paste. Werde mir das auf jeden Fall genauer ansehen.
Da wäre z.B. Paste, das allerdings einen ganzen Haufen Sachen mitbringt, die du alleine dafür möglicherweise bei weitem nicht benötigst. Deutlich schlanker ist da blackbirds Werkzeug, das aber leider noch nicht im Käseladen verfügbar ist *HINT, HINT*.
Möglicherweise ideal ist WebOb, eine Extraktion und Weiterentwicklung/Verbesserung eben genau der Request- und Response-Klassen aus Paste. Werde mir das auf jeden Fall genauer ansehen.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Was aber daran liegt, dass es kein offizielles Release gibt. Wenn es denn eines geben wird, dann kommt das sicher rein.Y0Gi hat geschrieben:Werkzeug, das aber leider noch nicht im Käseladen verfügbar ist *HINT, HINT*.
Apropos, Der Käseladen heißt nun wieder pippi... ähh, PyPI. Schade eigentlich.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Genau darum geht es ja: Ein Release.Leonidas hat geschrieben:Was aber daran liegt, dass es kein offizielles Release gibt. Wenn es denn eines geben wird, dann kommt das sicher rein.Y0Gi hat geschrieben:Werkzeug, das aber leider noch nicht im Käseladen verfügbar ist *HINT, HINT*.
Hallo,
erstmal Danke für die Links - die werd´ ich mir mal genauer ansehen.
(Vielleicht setz ich ja doch noch einen "richtigen" Server auf..)
Dank veers Hinweis mit der FieldStorage klappte der Dateiupload dann auch auf Anhieb,
interessanterweise bis ~ 40 Mb ( was mehr als genug ist ).
Das mit dem Cheeseshop klingt interessant,
als Python-Neuling bin ich über den Ausdruck auch schon ein paarmal gestolpert,
was hat der Name denn für einen Hintergrund ?
Jorn
erstmal Danke für die Links - die werd´ ich mir mal genauer ansehen.
(Vielleicht setz ich ja doch noch einen "richtigen" Server auf..)
Dank veers Hinweis mit der FieldStorage klappte der Dateiupload dann auch auf Anhieb,
interessanterweise bis ~ 40 Mb ( was mehr als genug ist ).
Das mit dem Cheeseshop klingt interessant,
als Python-Neuling bin ich über den Ausdruck auch schon ein paarmal gestolpert,
was hat der Name denn für einen Hintergrund ?
Jorn
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Der kommt aus einem Skech von Monty Python (Cheese Shop), wo ein Kunde in einen Käseladen geht in dem es keinen Käse gibt. Kannst ihn dir mal auf YouTube ansehen. Der Witz an der Sache war, dass in PyPI anfangs auch keine Pakete waren, die sind erst dort drin, seit setuptools und easy_install so populär geworden sind (was zum Teil sicherlich ein Verdienst von TG und Pylons war, die man ohne nur schwer installieren kann ohne etwas zu vergessen).Jorn hat geschrieben:Das mit dem Cheeseshop klingt interessant,
als Python-Neuling bin ich über den Ausdruck auch schon ein paarmal gestolpert,
was hat der Name denn für einen Hintergrund ?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
..beim Stichwort "Monthy Python" quillt das ja fast über *lol*.
"The cats eat it.." *rofl*
.. dann wollen wir mal hoffen das der Laden nicht dicht ist weil der Verkäufer erschossen wurde..
Ok,
schönen Dank für diesen informellen Hintergrund,
Jorn
"The cats eat it.." *rofl*
.. dann wollen wir mal hoffen das der Laden nicht dicht ist weil der Verkäufer erschossen wurde..

Ok,
schönen Dank für diesen informellen Hintergrund,
Jorn