Перейдите на другую веб-страницу с помощью скрипта Python CGI
Я пытаюсь изучить html-формы и python с помощью модуля cgi, а также пытаюсь использовать это для добавления данных в базу данных mysql. У меня установлены и работают Apache, MySQL, MySQL соединитель и Passlib.
Поэтому я делаю простую форму для входа в систему, и она передает данные в скрипт python, который выполняет простой поиск имени пользователя в БД. Если пользователь не найден, я хочу, чтобы он был перенесен на другую страницу, например страницу регистрации, и если он будет найден для перехода на страницу, которая будет (IRL) страницей пользователей на веб-сайте.
Я делаю все это локально, а не живу или буду.
Код Python (на основе форм и учебника по питону в pythonschool):
#! /usr/bin/python
import cgi
import cgitb
import mysql.connector as conn
import passlib
from passlib.hash import argon2
cgitb.enable()
def htmlTop():
print """Content-type:text/html\n\n
<DOCTYPE html>
<html lang=en">
<head>
<meta charset= utf-8/>
<title>Template</title>
</head>
<body>"""
def htmlTail():
print "</body>"
print "</html>"
def getData():
formdata = cgi.FieldStorage()
username = formdata.getvalue("username")
password = formdata.getvalue("password")
return username, password
def connectDB():
db = conn.connect(user='basic_user', password='twathead', host='127.0.0.1', db="exampleDB")
cursor = db.cursor()
return db, cursor
def check_person(username, password):
sql_str = "SELECT * FROM people WHERE username = '%s'" % (username)
cursor.execute(sql_str)
person = cursor.fetchone()
if person is None:
print "Name not found"
# go to signup page here!
else:
print "Name found"
print person[0]
# go to another page here, either html or another dynamically python-generated page
conn.close()
if __name__=="__main__":
try:
username, password = getData()
htmlTop()
print "Hello %s" %(username)
print "<br>"
db, cursor = connectDB()
check_person(username, password)
htmlTail()
except:
cgi.print_exception()
Я также хэширую пароль с помощью argon2 и вижу хэш в БД. Я знаю, что есть argon2.verigfy(пароль), но я не уверен, как использовать его против хешированного пароля в БД, поэтому любой совет по этому вопросу будет полезен.