本文主要记录利用python的Flask框架和Mysql数据库实现登录+注册功能,
创建项目文件
templates文件夹主要放网页文件
static文件夹下主要放静态文件比如 css、js 、图片等等;
因为在flask框架下默认模板文件是放在templates下的,所以不要把文件名写错了,当然也可以自定义文件夹名的,不过在后面创建对象的时候需要单独加一下,这个后面代码会说的
创建数据库
数据库结构如下图
注意主键不要漏了,不然后面注册的时候出现id重复就麻烦了,当然我们会有异常处理的,如果没有定义主键约束或者唯一约束,异常也就捕获不了了
下面写数据库管理类
import pymysql
# sql连接、 数据库连接类、数据库操作方法
from pymysql import IntegrityError
class sjk():
def __init__(self):
self.opensql()
def opensql(self):
'''获取数据库连接'''
self.conn=pymysql.connect('localhost',user='root',passwd='123456')
self.conn.select_db('python_flask')
print("数据库连接成功")
return self.conn
def downsql(self):
global conn
self.conn.close()
print("数据库关闭成功")
def user_inqure(self,id):
# 查询方法,需要提供id返回密码和姓名数组
cur=self.conn.cursor()
sql="select `name`,`password` from `user` where id={0}".format(id)
cur.execute(sql)
res=cur.fetchone()
# 以下处理数据查找不到的问题
if res==None:
self.downsql()
return 0
else:
self.downsql()
cur.close() #
return res
def user_add(self,id,password,name):
cur=self.conn.cursor()
sql="insert into user (`id`,`password`,`name`)values(%s,%s,%s)" # 最好采用这种方式添加
try:
n=cur.execute(sql,(id,password,name))
self.conn.commit() # 提交事务
cur.close() # 关闭游标
self.downsql() #关闭连接
return n
except IntegrityError:
cur.close()# 关闭游标
self.downsql() # 关闭连接
return 0
创建主页的HTML文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>主页</title>
</head>
<body background="../static/img/back.jpg" >
<center><h1>欢迎来到我的世界</h1></center>
<h3><center><a href="{{t1}}">登录</a></center></h3>
<h3><center><a href="{{t2}}">注册</a></center></h3>
</body>
</html>
创建登录页面的额HTML文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body background="../static/img/4.jpg">
<h2><center>登录</center></h2>
<form action="log" method="post">
账号:<input type="text" name="id"/><br/>
密 码:<input type="password" name="password"/><br/>
<input type="submit" value="登录"/>
<input type="reset" value="重置"/>
</form>
</body>
</html>
创建注册页面的HTML文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册界面</title>
</head>
<body background="../static/img/3.jpg">
<form action="page" method="post" >
昵称:<input type="text" name="name"><br/>
账号:<input type="text" name="id"> <br/>
密码:<input type="password" name="password"><br/>
<input type="submit" value="提交"><input type="reset" value="重置">
</form>
</body>
</html>
最后是最重要的flask路由和视图函数
from flask import Flask, render_template, url_for, request
import sql
app = Flask(__name__)
#上面说过,如果自定义的放html文件的文件夹不是templates,就需要像下面这样创建app对象
# app=Flask(__namee__,template=“自定义的文件夹名”)
sjk=sql.sjk() #创建数据库连接对象
@app.route('/')
def homepage():
'''主页'''
return render_template('index.html',t1=url_for('login'),t2=url_for('zhuce'))
@app.route('/log',methods=['POST','GET'])
def do_log():
'''登录'''
id=request.form['id']
password=request.form['password']
list=sjk.user_inqure(id) # 调用查询
if list==0:
return "不存在此用户"
else:
if list[1]==password:
return "恭喜{0}登录成功".format(list[0])
else:
return '请检测密码是否输入正确'
@app.route('/123')
def login():
'''登录页面'''
return render_template('login.html')
@app.route('/124')
def zhuce():
'''注册页面'''
return render_template('zhuce.html')
@app.route('/page',methods=['post','get'])
def page():
'''注册处理方法'''
id=request.form['id']
name=request.form['name']
password=request.form['password']
n=sjk.user_add(id,name,password) # 添加到是数据库中
if n==1:
return '<h3><center>{0}恭喜注册成功</center></h3>'.format(name)
else:
return '<h3><center>{0}很抱歉~注册失败~请换个昵称试试呢</center></h3>'.format(name)
if __name__ == '__main__':
app.debug=True # 开启调试模式 注:在生成坏境不能开调试模式,有被攻击的额风险
app.run()
最后放几张效果图
可能与背景图与读者不同,不过取决于读者自己使用的
共享给小伙伴访问
只需要将run()里面的host参数指定成0.0.0.0就可以了,然后将你的本地id地址提供给小伙伴,然后小伙伴使用ip地址+端口号5000就能访问了
不过需要关闭本地的防火墙,并且只能是在同一个局域网内才能访问
if __name__ == '__main__':
app.debug=True # 开启调试模式
app.run(host=‘0.0.0.0’)
访问成功