Ich versuche, eine sehr einfache Anmeldeseite zu erstellen, die den Benutzer nach seinen und fragt register_no
. username
Und password
wenn er die Schaltfläche „Senden“ drückt. Ich versuche zu überprüfen, ob es sich um einen bestehenden oder einen neuen Benutzer handelt, und eine entsprechende Meldung anzuzeigen.
Meine Ordnerhierarchie sieht so aus
prodicus@Acer:~/Downloads/souvik_refactoring$ tree
.
├── cgi-bin
│ ├── creating_user_base_table.py
│ ├── user_base.db
│ └── usr_check.py
├── index.html
└── keyCheck.py
1 directory, 5 files
Was ich versucht habe:
Für dieindex.html
<!DOCTYPE html>
<html>
<head>
<title>Login page</title>
</head>
<body>
<div style = "text-align : center ; ">
<h1>Login page</h1>
<form action="/cgi-bin/usr_check.py" method="get">
Registration number : <input type="number" name="register_no" min="1" max="2000000000">
<br><br>
Username : <input type="text" name="username">
<br><br>
Password : <input type="password" name = "password">
<br><br>
<input type="submit" value = "Login">
</form>
</div>
</body>
</html>
Fürcreating_user_base_table.py
#!/usr/bin/env python3.4
import sqlite3
import os
db_name = "user_base.db"
if db_name in os.listdir():
print("removing the user_base.db and creating a fresh copy of it")
os.system("rm user_base.db")
print("Creating the database")
conn = sqlite3.connect(db_name)
cur = conn.cursor()
user_table = "CREATE TABLE users(reg_no INTEGER PRIMARY KEY, user_name TEXT, pass TEXT)"
new_users = (
(1081310251, 'admin', 'admin'),
(1081310234, 'foo', 'admin123')
)
cur.execute(user_table)
print("table created")
cur.executemany('INSERT INTO users VALUES(?, ?, ?)', new_users)
conn.commit()
print("default users created \n\ndisplaying them")
cur.execute('SELECT * FROM users')
print(cur.fetchall())
und schlussendlichusr_check.py
#/usr/bin/env python3.4
import cgi, cgitb
import os
import sqlite3
cgitb.enable()
form = cgi.FieldStorage()
register_no = form.getvalue('register_no')
username = form.getvalue('username')
passwd = form.getvalue('password')
print("Content-type:text/html\r\n\r\n")
print("<html>")
print("<head>")
print("<h1>Shit gets real here</h1>")
print("</head>")
print("<body>")
print('<div style = "text-align:center ; "')
# print("</div>")
print("")
conn = sqlite3.connect('user_base.db')
cur = conn.cursor()
## now to check whether the entered data is for
## -> new user
## -> an old user
cur.execute('SELECT user_name FROM users WHERE register_no = ?', (register_no,))
rows = cur.fetchall()
print("<br><br>")
if len(rows) == 0:
print("<p>User : <b>", username , "</b> does not exist.</p>")
cur.execute('INSERT INTO users VALUES(?, ?, ?)', (register_no, username, passwd))
print("<p>User was created successfully</p>")
print("Done")
else:
print("<p>Welcome<b>", username ,"</b>. Good to have you back")
print("<br><p>Your account details</p>")
print("<ul>")
print("<li>Register number : ", register_no, " </li>")
print("<li>Username " , username, "</li>")
print("</ul>")
Fehlerprotokoll:
prodicus@Acer:~/Downloads/souvik_refactoring$ python -m CGIHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
127.0.0.1 - - [02/Nov/2015 12:43:23] "GET /index.html HTTP/1.1" 200 -
127.0.0.1 - - [02/Nov/2015 12:44:03] "GET /cgi-bin/usr_check.py?register_no=1081310234&username=foo&password=admin123 HTTP/1.1" 200 -
Traceback (most recent call last):
File "/usr/lib/python2.7/CGIHTTPServer.py", line 252, in run_cgi
os.execve(scriptfile, args, env)
OSError: [Errno 8] Exec format error
127.0.0.1 - - [02/Nov/2015 12:44:03] CGI script exit status 0x7f00
Im Anschluss daranhttps://stackoverflow.com/questions/10793042/sqlite3-insert-using-python-and-python-cgiIch habe die Dateiberechtigungen
prodicus@Acer:~/Downloads/souvik_refactoring$ ll
total 36
drwxrwxr-x 3 prodicus prodicus 4096 Nov 2 08:30 ./
drwxr-xr-x 15 prodicus prodicus 20480 Nov 2 11:29 ../
drwxrwxrwx 2 prodicus prodicus 4096 Nov 2 12:23 cgi-bin/
-rw-rw-r-- 1 prodicus prodicus 629 Nov 2 08:38 index.html
-rwxrwxr-x 1 prodicus prodicus 463 Nov 2 08:29 keyCheck.py*
Und
prodicus@Acer:~/Downloads/souvik_refactoring/cgi-bin$ ll
total 20
drwxrwxrwx 2 prodicus prodicus 4096 Nov 2 12:23 ./
drwxrwxr-x 3 prodicus prodicus 4096 Nov 2 08:30 ../
-rwxrwxrwx 1 prodicus prodicus 710 Nov 1 23:12 creating_user_base_table.py*
-rwxrwxrwx 1 prodicus prodicus 2048 Nov 2 12:23 user_base.db*
-rwxrwxrwx 1 prodicus prodicus 1576 Nov 2 08:26 usr_check.py*
Überraschenderweise cgitb
wird kein Fehler angezeigt. Was mache ich falsch?
Antwort1
Endlich habe ich herausgefunden, was daran falsch war. Ich habe einen wirklich dummen Fehler gemacht! Danke an @cas, der mich darauf aufmerksam gemacht hat.
Hatte ein #/usr/bin/env python3.4
anstelle von getan #!/usr/bin/env python3.4
.
Zweitens musste ich den absoluten Pfad angeben, als das Skript usr_check.py
versuchte, eine Verbindung zur Datenbank herzustellen user_base.db
.
Das hat das Problem für mich gelöst.