我正在尝试使用cgi模块学习html表单和python,并且还试图使用它来将数据添加到mysql数据库中。我已经安装并正在运行apache,mysql,mysql连接器和passlib。
所以我正在做一个简单的登录类型表单,它将数据传递给python脚本,该脚本在db中执行简单的用户名查找。如果找不到用户,我希望它转移到另一个页面,例如注册页面,并且如果发现它转移到(IRL)是网站上的用户页面的页面。
我在本地进行所有操作,并且非现场直播。
Python代码(基于pythonschool上的表单和python教程):
#! /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(password),但不确定如何针对数据库中的哈希密码使用它,因此对此的任何建议都将有所帮助。