CGI编程:实现登录注册系统
功能:用MySQL存储,实现登录注册系统
环境:Python + MySQL5.5.27 + Apache2.4 +pymsql(连接MySQL第三方库)
编译环境:本人使用的为 anaconda + pycharm
步骤:
1.预先创建用于存储账号的数据库(功能:检验登录的用户名和密码、检验注册并注册信息写入数据库中)
2.编写登录和注册页面
3.编程处理登录的CGI程序,并编译
4.编写处理注册的CGI程序,并编译
5.微调,整合文件,实现程序的连贯性
实现的效果图:
1.创建数据库
2.编写登录和注册页面
登录页面:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>登录</title>
</head>
<body style="background:darkcyan">
<form action="/cgi-bin/login_111.py" method = "get">
<div>
<div style="height: 50px"></div>
<div style="width: 20px;float: left"></div>
<div style="height: 550px;float: left" >
<img src="background.jpg" style="width: 680px;height: 550px;">
</div>
<div style="width: 600px;height: 550px;float: right;background:beige;color: black">
<div style="height: 130px"></div>
<div >
<div style="height: 70px;width: 500px;float: right">
<h2> 登录 </h2>
</div>
<div style="height: 10px"></div>
<div style="height: 70px;width: 450px;float: right">
账号:<input type="text" name="user" ><br/>
密码:<input type="password" name="password"><br/>
</div>
<div style="height: 80px;width: 320px;float: right">
<input type="submit" value="取消"> <input type="submit" value="确认">
</div>
</div>
</div>
</div>
</body>
</html>
注册页面:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body style="background: darkcyan">
<form action="/cgi-bin/zhuce_111.py" method = "get">
<div style="height: 120px"></div>
<div align="center" style="width: 1200px;height: 60px">
<h3>请填写以下信息:</h3>
</div>
<div align="center" >
<div style="height: 40px">
账号:<input type="text" name="name0001"> <br/>
</div>
<div style="height: 40px">
密码:<input type="password" name="password001"><br/>
<br/> </div>
<div style="height: 40px">
邮箱:<input type="text" name="emil"><br/>
<br/> </div>
<div style="height: 40px">
电话:<input type="text" name="iphone"><br/>
</div>
<div style="height: 40px">
住址:<input type="text" name="adress"><br/>
</div>
<div style="height: 20px"> </div>
<div align="right" style="width:350px;height: 80px ">
<input type="submit" value="取消"><input type="submit" value="注册">
</div>
</div>
</body>
</html>
3.编程处理登录的CGI程序,并编译
#! E:\anaconda\python.exe
# coding:utf-8
import cgi
form =cgi.FieldStorage()
#登录时账号和密码
name1 = form.getvalue("user")
password1 = form.getvalue("password")
#连接MySQL数据库
import pymysql
msg1 = ""
msg2 = ""
#连接MySQL
connection = pymysql.connect(host ="127.0.0.1",port =3306,\
user = "shy",password = "123456",db = "logdb",charset="utf8mb4")
#查询信息
#----------------------------------------------------
sql = "select * from login_001;"
cursor = connection.cursor()
"""cursor.execute(sql)
namedict = {}
i = cursor.fetchall()
for k in range(len(i)):
(num,name,password) = i[k]
namedict[name] = password
if name1 in namedict.keys():
msg1 = "账号存在"
if password1 in namedict.values():
msg2 = "登录成功"
else:
msg2 = '密码错误'
else:
msg1 = '账号不存在' """ #上面代码也能遍历校验用户登录
#此代码大大改善登录的响应时间
sql2 = "select * from login_001 where name = + '{}';".format(name1)
if cursor.execute(sql):
i = cursor.fetchall()
if password1 == i[0][2]:
msg2 = "登录成功"
else:
msg2 = '密码错误'
else:
msg1 = '账号不存在'
connection.commit()
cursor.close()
#-------------------------------------
if msg1 != "账号不存在":
if msg2 == "登录成功":
print("""Content-text:text/html;charset:utf-8\n\n
<!DOCTYPE html>
<html>
<head lang="en">
<title>home</title>
</head>
<body style="background: paleturquoise">
<div style="height: 5px"></div>
<h2 align="center">欢迎回来,{}</h2>
<p align="center" style="width: 1000px">欢迎访问预测天气模型,请 <a href="../test/loginsystem/porch.html">点击这里</a> 访问:</p>
<p align="center" style="width: 920px">机器学习各激活函数的可视化:</p>
<div>
<p style="text-align: center">
<img style="width: 800px;height:400px;" src="../test/Figure_3.png">
</p>
</div>
<div style="height: 30px"></div>
</body>
</html>""".format(name1))
else:
print("""Content-text:text/html;charset:utf-8\n\n
<!DOCTYPE html>
<html>
<head lang="en">
<title>home</title>
</head>
<body style="background: paleturquoise">
<div style="height: 60px"></div>
<h1 align="center">登录失败,{}</h1>
<div style="height: 30px"></div>
<p align="center" style="width: 1000px">请点击 <a href="../test/loginsystem/注册页面.html">这里</a> 注册</p>
</body>
</html>""".format(msg2))
else:
print("""Content-text:text/html;charset:utf-8\n\n
<!DOCTYPE html>
<html>
<head lang="en">
<title>home</title>
</head>
<body style="background: paleturquoise">
<div style="height: 60px"></div>
<h1 align="center">登录失败,{}</h1>
<div style="height: 30px"></div>
<p align="center" style="width: 1000px">请点击 <a href="../test/loginsystem/注册页面.html">这里</a> 注册</p>
</body>
</html>""".format(msg1))
4.编写处理注册的CGI程序,并编译
#! E:\anaconda\python.exe
# coding:utf-8
import cgi
form =cgi.FieldStorage()
#获取注册信息
name001 = form.getvalue("name0001")
password001 = form.getvalue("password001")
emil = form.getvalue("emil")
iphone = form.getvalue("iphone")
adress = form.getvalue("adress")
#连接MySQL数据库
import pymysql
#连接MySQL
msg1 = ""
msg2 = ""
connection = pymysql.connect(host ="127.0.0.1",port =3306,\
user = "shy",password = "123456",db = "logdb",charset="utf8mb4")
sql2 = "select * from login_001;"
sql3 = "select * from login_001 where name = + '{}';".format(name001)
cursor = connection.cursor()
data = ''
if cursor.execute(sql3):
data = "数据已存在"
else:
i = cursor.execute(sql2)+1
sql4 = "INSERT INTO logdb.login_001 (user_ID, NAME, paasword) VALUES('00{}','{}','{}');".format(i,name001,password001)
cursor.execute(sql4)
connection.commit()
cursor.close()
if data:
print("""Content-text:text/html;charset:utf-8\n\n
<!DOCTYPE html>
<html>
<head lang="en">
<title>home</title>
</head>
<body style="background: paleturquoise">
<div style="height: 5px"></div>
<h1 align="center">账号已存在,请重新注册</h1>
<div style="height: 30px"></div>
</body>
</html>""")
else:
print("""Content-text:text/html;charset:utf-8\n\n
<!DOCTYPE html>
<html>
<head lang="en">
<title>home</title>
</head>
<body style="background: paleturquoise">
<div style="height: 5px"></div>
<h1 align="center">注册成功,欢迎!</h1>
<p align="center" style="width: 1000px">欢迎访问预测天气模型,请 <a href="../test/porch.html">点击这里</a> 访问:</p>
<p align="center" style="width: 920px">机器学习各激活函数的可视化:</p>
<div>
<p style="text-align: center">
<img style="width: 800px;height:400px;" src="../test/Figure_3.png">
</p>
</div>
<div style="height: 30px"></div>
</body>
</html>""".format(name001))
5.微调,实现程序的连贯性