from flask import Flask, request, redirect, make_response, render_template, session
from flask_sqlalchemy import SQLAlchemy
import pymysql
pymysql.install_as_MySQLdb()
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:123456@localhost:3306/flask'
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True
app.config['SECRET_KEY']='521999'
db = SQLAlchemy(app)
# 创建实体类
class Register(db.Model):
__tablename__ = 'register' # 表名
id = db.Column(db.Integer,primary_key=True) # 注册表中字段
username = db.Column(db.String(20),nullable=False,unique=True)
password = db.Column(db.String(64),nullable=False)
# 将创建好的实体类映射到数据库
db.create_all()
# 删除数据实体类在数据路中的映射
# db.drop_all()
@app.route('/')
def index():
return '登陆成功!!'
@app.route('/register',methods=['GET','POST'])
def register_views():
# GET 刷新页面
if request.method == 'GET':
return render_template('register.html')
else:
# 通过post请求 获取页面信息
uname = request.form.get('uname')
upwd = request.form.get('upwd')
upwd2 = request.form.get('upwd2')
# 查询 用户名
username = db.session.query(Register).filter_by(username=uname).first()
# 判断用户名是否存在
if username:
return render_template('register.html',errors='用户名已存在')
else:
# 判断两次密码是否输入一直
if upwd != upwd2:
return render_template('register.html',errors='两次输入密码不一致')
else:
# 创建 Register 的实例 user
user = Register()
# 给属性赋值(相当于向表内填写数据)
user.username = uname
user.password = upwd
# 向表中添加数据
db.session.add(user)
# 自动提交 上面已设置
return '用户注册成功'
@app.route('/login', methods=['GET','POST'])
def login_views():
if request.method == 'POST':
# resp = redirect('/')
# 设置 返回对象
resp = make_response('登录成功!!!')
# 获取数据
uname = request.form.get('uname')
upwd = request.form.get('upwd')
# 数据库验证登录信息
user = db.session.query(Register).filter_by(username=uname).first()
# 密码是否与数据库中存储密码一致
if user.password == upwd:
# 添加session 对象
session['uname']= uname
# 是否设置保存密码
if 'isSaved' in request.form:
# 添加cookies对象
resp.set_cookie('uname',uname,60*60*24*30)
return resp
else:
return redirect('/')
else:
return render_template('login.html',errors='用户名或密码错误!')
else:
# 判断 是否是已登录状态
if 'uname' in session:
return redirect('/')
else:
# 判断是否曾记住密码
if 'uname' in request.cookies:
uname_1 = request.cookies['uname']
session['uname']=uname_1
return redirect('/')
else:
return render_template('login.html')
return redirect('/')
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
login.html 模块
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/login" method="post">
<p>
用户名:<input type="text" name="uname">
</p>
<p>
密 码:<input type="password" name="upwd">
</p>
<p>
记住密码:<input type="checkbox" name="isSaved" >
</p>
<p>
<input type="submit" value="登录">
</p>
</form>
</body>
</html>
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
{# 输出错误信息#}
{% if errors %}
alert('{{errors}}');
{% endif %}
</script>
</head>
<body>
<form action="/register" method="post">
<p>
用户名:<input type="text" name="uname">
</p>
<p>
密 码:<input type="password" name="upwd">
</p>
<p>
密 码:<input type="password" name="upwd2">
</p>
<p>
<input type="submit" value="注册">
</p>
</body>
</html>