最近在学校写一个小项目其中刚写到登陆检测,因为是刚自学了python,写一篇文章记录一下过程。。。
首先写这个功能我用了两个类,一个是用来检测登陆的logincheck.py一个是用来连接数据库的mysql.py
我们先来看mysql.py:
接着在mysql.py文件中代码如下
#导入mysql驱动
import mysql.connector
class MySQL(object):
def __init__(self, host= 'localhost', port= '3306', username = 'root', password= 'pwd', db= 'etc', charset= 'UTF-8'):
self.host = host
self.port = port
self.user = username
self.password = password
self.db = db
self.charset = charset
def connection(self): # 得到数据库连接
conn=mysql.connector.connect(host=self.host,port=self.port,user=self.user, password=self.password, database=self.db)
return conn
def select(self, sql): # 查询传入sql语句,返回result结果
conn = self.connection()
cursor = conn.cursor()
# noinspection PyBroadException
try:
cursor.execute(sql)
results = cursor.fetchall()
return results
except Exception as e:
raise e
finally:
cursor.close()
conn.close()
这里我感觉cursor的作用和java中的PreparedStatement有点类似,就是用来执行sql语句并返回结果的。result返回结果被保存在了元组里,cursor.fetchall()用来检查数据库每行数据如找到正确匹配将数据存入元组中并返回,还有一个是cursor.fetchone()方法每次只扫描一行数据所以要扫描数据库中的所有行要用循环。
以上是连接数据库的文件,下面是登陆逻辑的编写:
from flask import Flask
from flask import request
import sys
sys.path.append(r"C:\Users\qq\Desktop\机房项目\kk2")
from util.mysql import MySQL
app=Flask(__name__)
html='''
<!DOCTYPE html>
<title>Upload File</title>
<h1>signin</h1>
<form method=post enctype=multipart/form-data>
用户名<input type=text name=username>
密码<input type=password name=pwd>
<input type=submit value=登陆>
</form>
'''
@app.route('/', methods=['GET'])
def signin_form():
return html
@app.route("/",methods=['GET', 'POST'])
def login():
# 需要从request对象读取表单内容:
username=request.form['username']
pwd=request.form['pwd']
sql=MySQL()
tu = sql.select("select * from Admin where userID='"+username+"' and pwd='"+pwd+"';")
print (tu)
num=0
for data in tu:
num=num+1
if(num != 0):
return '登陆成功'
else:
return "no"
if __name__ == '__main__':
app.run()
由于mysql.py和logincheck.py文件的父目录不同所以在import时需要先导入系统路径才能真正的导入mysql文件,接下来的逻辑就很清晰了,获取表单内容,和数据库做比对。如果对flask了解不多也可以去廖雪峰老师网站中web开发下面简单学习。
附上实际运行图:
数据库结构:
登陆页面:
验证成功: