Seite 1 von 1

Login mit CGI

Verfasst: Samstag 6. Dezember 2014, 13:28
von DopaminZH
Hallo, ich hab ein Versionsproblem (2.x / 3.x)

Folgendes CGI-Python 2.x - Script läuft fehlerfrei.

Code: Alles auswählen

#!/usr/local/bin/python
import cgi

def header(title):
    print "Content-type: text/html\n"
    print "<HTML>\n<HEAD>\n<TITLE>%s</TITLE>\n</HEAD>\n<BODY>\n" % (title)

def footer():
    print "</BODY></HTML>"

form = cgi.FieldStorage()
password = "python"

if not form:
    header("Login Response")
elif form.has_key("login") and form["login"].value != "" and form.has_key("password") and form["password"].value == password:
    header("Connected ...")
    print "<center><hr><H3>Welcome back," , form["login"].value, ".</H3><hr></center>"
    print r"""<form><input type="hidden" name="session" value="%s"></form>""" % (form["login"].value)
    print "<H3><a href=browse.html>Click here to start browsing</a></H3>"

else:
    header("No success!")
    print "<H3>Please go back and enter a valid login.</H3>"

footer()
übersetzt hab ich folgendemassen (1.) print in Klammern gesetzt, 2.) die Gänsefüsse durch Hochkommas und 3.) da has.key in Version 3 nicht mehr gibt aus form.has_key("login") jeweils durch ('login') in form ersetzt etc:

Code: Alles auswählen

#!/usr/bin/python3
import cgi

def header(title):
    print('Content-type: text/html\n')
    print('<HTML>\n<HEAD>\n<TITLE>%s</TITLE>\n</HEAD>\n<BODY>\n" % (title)')

def footer():
    print('</BODY></HTML>')

form = cgi.FieldStorage()
password = 'python'

if not form:
    header('Login Response')
elif ('login') in form and form['login'].value != '' and ('password') in form and form['password'].value == password:
    header('Connected ...')
    print('<center><hr><H3>Welcome back,' , form['login'].value, '.</H3><hr></center>')
    print("""<form><input type='hidden' name='session' value="%s"></form>""" % (form['login'].value)
    print('<H3><a href=browse.html>Click here to start browsing</a></H3>')

else:
    header('No success!')
    print('<H3>Please go back and enter a valid login.</H3>')

footer()
Es funktioniert aber noch nicht. Offensichtlich habe ich irgedwas noch nicht übersetzt oder falsch übersetzt.

Das Apache Error Log ist auch nicht gerade hilfreich:
[Sat Dec 06 01:31:41 2014] [error] [client x] File "/usr/lib/cgi-bin/login.py", line 20, referer: http://x/py/login.html
[Sat Dec 06 01:31:41 2014] [error] [client x] print('<H3><a href=browse.html>Click here to start browsing</a></H3>'), referer: http://x/py/login.html
[Sat Dec 06 01:31:41 2014] [error] [client x] ___^, referer: http://x/py/login.html
[Sat Dec 06 01:31:41 2014] [error] [client x] SyntaxError: invalid syntax, referer: http://x/py/login.html
[Sat Dec 06 01:31:41 2014] [error] [client x] Premature end of script headers: login.py, referer: http://x/py/login.html
Mit 2to3 Übersetzung hats auch nicht geklappt. Was hab ich vergessen?

Kann bitte jemand helfen oder ein Link zu dieser Thematik?

Danke

Re: Login mit CGI

Verfasst: Samstag 6. Dezember 2014, 13:49
von BlackJack
@DopaminZH: Das ist nur bedingt ein Versionsproblem. Klammersetzung muss in beiden Versionen stimmen, das heisst für jede öffnende Klammer muss an der passenden Stelle auch eine schliessende Klammer stehen.

Beim unnötigen Wechsel von " nach ' hast Du auch einen Fehler eingebaut.

(peinlicher Fehler...)

Verfasst: Samstag 6. Dezember 2014, 16:17
von DopaminZH
Danke, es funktioniert jetzt.

PS: PyCharm hätte den Klammer-Fehler erkannt, Emacs nicht.