Login mit CGI

Django, Flask, Bottle, WSGI, CGI…
Antworten
DopaminZH
User
Beiträge: 14
Registriert: Samstag 6. Dezember 2014, 00:29

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
Zuletzt geändert von Anonymous am Samstag 6. Dezember 2014, 13:43, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
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.
DopaminZH
User
Beiträge: 14
Registriert: Samstag 6. Dezember 2014, 00:29

Danke, es funktioniert jetzt.

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