前言
基于上期内容,入门简单的登录界面。链接如下:
本期主要加入mysql进行一个数据库的交互操作,实现账户密码的验证。废话不多说进入正题
一、环境准备
1.下载MySQL
下载MySQL在官网进行下载,这里不过多叙述,主要是配置root账户密码用于连接,这里提供一个数据库管理工具DBserver
2.Conda环境
下载pymsql安装包
conda install pymysql
如果没有conda环境,下载对应python版本后使用pip命令进行安装
pip install pymysql
其它环境参考上一篇文章
二、目录结构
templates存放网页的模板
static存放静态资源
demo.py是主程序入口
tools存放工具测试类
三、模板代码
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>主页</title>
</head>
<body>
<h1>这是主页</h1>
<a href="/l">前往登录</a>
</body>
</html>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="/login" method="post">
<p>用户名:<input type="text" name="Username"></p>
<p>密码:<input type="password" name="Passwd"></p>
<input type="submit" value="登录">
</form>
</body>
</html>
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册</title>
</head>
<body>
<form action="/register" method="post">
<p>用户名:<input type="text" name="Username"></p>
<p>密码:<input type="password" name="Passwd"></p>
<input type="submit" value="注册">
</form>
</body>
</html>
welcome.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>欢迎</title>
</head>
<body>
<h1>欢迎{{username}}</h1>
<a href="/logout">登出</a>
</body>
</html>
四、后端实现
demo.py
#引入包
from flask import Flask,request,session,render_template,redirect,url_for
import pymysql
#数据库链接函数
#查询操作
def Connect_db_select(username,passwd):
try:
#连接对象
db = pymysql.connect(host='localhost', user='root', passwd='root', database="test_db", port=3306)
#创建sql查询语句
sql="select * from t_user where username='"+username+"'"+" and passwd='"+passwd+"'"
cursor=db.cursor()
cursor.execute(sql)
result=cursor.fetchall()
if len(result)>0:
print("success")
db.close()
return True
except:
print("error")
return False
#插入操作
def Connect_db_insert(username,passwd):
try:
#连接对象
db = pymysql.connect(host='localhost', user='root', passwd='root', database="test_db", port=3306)
#创建sql查询语句
sql="insert into t_user (username,passwd) values('"+username+"','"+passwd+"')"
cursor=db.cursor()
cursor.execute(sql)
db.commit()
if cursor.rowcount>0:
print("success")
db.close()
return True
except:
print("error")
return False
#创建对象
app=Flask(__name__)
app.secret_key="zqh"
#定义主画面
@app.route("/")
def index():
return render_template("index.html")
#定义登录界面
@app.route("/l")
def lo():
return render_template("login.html")
#定义注册界面
@app.route("/r")
def re():
return render_template("register.html")
#处理登录请求
@app.route("/login",methods=["POST","GET"])
def login():
#get请求重定向要home页面
if request.method=="GET":
# 如果有直接进入主页
if session.get("Username"):
return render_template("welcome.html", username=session["Username"])
#session没有就返回登录
else:
return redirect(url_for("lo"))
#post请求处理form表单
else:
#输入的不是空的用户名或空的密码
Username=request.form["Username"]
Passwd=request.form["Passwd"]
if Username!="" and Passwd!="":
#进行用户名和数据的验证
if Connect_db_select(Username,Passwd):
session["Username"] = Username
return render_template("welcome.html", username=session["Username"])
#否则进行注册
else:
return redirect(url_for("re"))
#否则重新进行登录
else:
return redirect(url_for("lo"))
#处理注册请求
@app.route("/register",methods=["POST","GET"])
def register():
# get请求重定向要home页面
if request.method == "GET":
# 如果有直接进入主页
if session.get("Username"):
return render_template("welcome.html", username=session["Username"])
# session没有就返回注册
else:
return redirect(url_for("re"))
# post请求处理form表单
else:
#输入的不是空的用户名或空的密码
Username=request.form["Username"]
Passwd=request.form["Passwd"]
if Username!="" and Passwd!="":
#进行用户名和数据的验证
if Connect_db_insert(Username,Passwd):
session["Username"] = Username
return render_template("welcome.html", username=session["Username"])
# 否则重新注册
else:
return redirect(url_for("re"))
# 否则重新注册
else:
return redirect(url_for("re"))
#处理登出
@app.route("/logout")
def logout():
session.pop("Username",None)
return redirect(url_for("index"))
if __name__=="__main__":
app.run(debug=True)
五、总结
主要是进行了一个和数据库交互的操作,并通过flask展示在网页上。