Error de CGI al intentar recuperar desde sqlite3

Error de CGI al intentar recuperar desde sqlite3

Estoy intentando crear una página de inicio de sesión muy simple, que solicita al usuario su nombre register_noy usernamesu nombre password. Y cuando presiona el botón enviar. Estoy tratando de verificar si es un usuario existente o un usuario nuevo y mostrar un mensaje en consecuencia.

Mi jerarquía de carpetas es así.

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

Lo que he probado:

Para elindex.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>

Paracreating_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())

y finalmenteusr_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>")

Registro de errores:

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

Siguiendo estohttps://stackoverflow.com/questions/10793042/sqlite3-insert-using-python-and-python-cgitengo los permisos de los archivos

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*

y

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*

Sorprendentemente, cgitbno muestra ningún error. ¿Dónde me equivoco?

Respuesta1

Finalmente descubrí qué había de malo en esto. ¡Estaba cometiendo un error realmente tonto! Gracias a @cas por hacerme llegar a él.

Había hecho un #/usr/bin/env python3.4en lugar de #!/usr/bin/env python3.4.

En segundo lugar, tuve que proporcionar la ruta absoluta cuando el script usr_check.pyintentaba conectarse a la base de datos user_base.db.

Eso me solucionó el problema.

información relacionada