Seite 1 von 1

cgi.FieldStorage()-Problem

Verfasst: Mittwoch 8. September 2010, 21:49
von Danipol
hallo forum,
ich habe (im Moment erst) zwei CGI-Skripe. Das 1. überprüft, ob der Nutzer schon über seine IP angemeldet ist; wenn nicht, stellt es ein Formular zur Verfügung:

Code: Alles auswählen

#...viel code drüber...
import cgi, os
import cgitb; cgitb.enable()

ip = cgi.escape(os.environ["REMOTE_ADDR"])

if DB.logged_in(ip)[0]:
    print "hello!"
else:        
    print '''
    <form method="POST" action="login.py">
          <input type="text" name="username" size="20"><BR />
          <input type="password" name="password"><BR />
          <input type="submit" value="Abschicken">
          <input type="hidden" name="session" value="1f9a2">
    </form>
    '''
Und dafür gibt es dann eben noch die login.py, wie auch index.py hat sie alle Berechtigungen auf dem Server, weil ich zuerst dachte, es läge daran.

Code: Alles auswählen

#...
import cgi, os

form = cgi.FieldStorage()
ip = cgi.escape(os.environ["REMOTE_ADDR"])

if DB.logged_in(ip)[0]:
    print "hello!"
else:
    print form
so. und FORM sieht dann immer so aus:

Code: Alles auswählen

FieldStorage(None, None, []) 
Kann mir jemand helfen oder hatte jemand schon ein ähnliches Problem? Am Code, der über dem Skript liegt, kann es auf jeden fall nicht liegen, ich hatte ihn auch zum Test schon einmal auskommentiert.

Daniel

Re: cgi.FieldStorage()-Problem

Verfasst: Donnerstag 9. September 2010, 10:49
von Hyperion
Also eine Lösung habe ich da im Moment auch nicht wirklich.

Aber mal als Anregung: Muss es denn wirklich dieses low-Level cgi-Gedöns sein? Ich würde Dir zu einem kleinen Framework raten, welches Dir viel mehr Komfort bietet und ggf. sogar für Funktionen wie Login bereits fertige Rezepte oder Lösungen bietet. Schau Dir doch mal flask an; imho ein gutes Framework für EInsteiger, weil es wenig Boilerplate-Code benötigt, kein Scaffolding beinhaltet und zudem sehr viel (sehr gute!) Doku besitzt. Dort gibt es auch massig Beispiele zur Login- und Formular-Problematik.

Ich denke die zwei bis drei Stunden Arbeit¹, Deine beiden Scripte in flask umzuschreiben sind gut investiert!

Bevor es andere tun oder gar meckern: mit bottle existiert auch noch ein zweites Micro-Framework, was hier sehr beliebt ist und seine Vorteile besitzt.

Ich würde mich an Deiner Stelle def. von dem cgi-Weg verabschieden und mich in eines der beiden Frameworks einarbeiten. Geht wirklich recht zügig und Du musst Dich mit vielem Low-Lever-Kram nicht mehr plagen :-)

¹: Je nach Kenntnisstand ;-) Aber ich denke vom Betreten der Webseite bis zum lokalen Testen sollte das für jemanden mit Grundkenntnissen in Python und Webtechnologien möglich sein.

Re: cgi.FieldStorage()-Problem

Verfasst: Freitag 10. September 2010, 07:55
von jens
Ich würde zu Django raten. Man für den Fall zu groß erscheinen. Aber wenn man mal angefangen hat, möchte man meist mehr...

Am besten erst mal diese Seite lesen: http://wiki.python.de/Web-Frameworks

Zum eigentlichen Problem: Ich würde wohl alles in einem Skript machen.