cgi.FieldStorage()-Problem

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Danipol
User
Beiträge: 38
Registriert: Sonntag 1. Februar 2009, 21:08

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
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten