首先创建一个users表
main.py
from flask import Flask, render_template, redirect, request, session
from flask_sqlalchemy import SQLAlchemy
# 创建 Flask 应用程序
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secretkey' # 设置一个用于加密 session 数据的密钥
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db' # SQLite 数据库文件路径
# 创建 SQLAlchemy 对象
db = SQLAlchemy(app)
# 用户数据模型
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), unique=True, nullable=False)
password = db.Column(db.String(100), nullable=False)
def __repr__(self):
return f'<User {self.username}>'
# 设置应用上下文
with app.app_context():
# 创建数据库表
db.create_all()
# 路由:主页
@app.route('/')
def index():
if 'username' in session:
return f'已登录,用户名:{session["username"]}'
return '未登录'
# 路由:登录
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
user = User.query.filter_by(username=username, password=password).first()
if user:
session['username'] = username
return redirect('/')
else:
return '登录失败'
return render_template('login.html')
# 路由:注销
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect('/')
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
# 检查用户名是否已存在
if User.query.filter_by(username=username).first():
return '该用户名已被注册'
# 创建新用户
new_user = User(username=username, password=password)
db.session.add(new_user)
db.session.commit()
return '注册成功'
return render_template('register.html')
if __name__ == '__main__':
app.run()
login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录</title>
<style>
body {
background-color: #f1f1f1;
font-family: Arial, sans-serif;
}
h1 {
color: #333;
background-color: #f9f9f9;
padding: 10px;
border-radius: 5px;
}
p {
font-size: 16px;
line-height: 1.5;
}
.container {
width: 800px;
margin: 0 auto;
padding: 20px;
background-color: #fff;
box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
}
button {
background-color: #4CAF50;
color: #fff;
padding: 10px 20px;
font-size: 18px;
border: none;
border-radius: 5px;
cursor: pointer;
transition: background-color 0.3s ease-in-out;
}
button:hover {
background-color: #45a049;
}
</style>
</head>
<body>
<div class="container">
<h1>登录</h1>
<form method="POST">
<label for="username">Username:</label>
<input type="text" id="username" name="username" required><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required><br><br>
<input type="submit" value="登录"><br><br>
<a href="http://127.0.0.1:5000/register">注册</a>
</form>
</div>
</body>
</html>
register.py
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册</title>
<style>
body {
background-color: #f1f1f1;
font-family: Arial, sans-serif;
}
h1 {
color: #333;
background-color: #f9f9f9;
padding: 10px;
border-radius: 5px;
}
p {
font-size: 16px;
line-height: 1.5;
}
.container {
width: 800px;
margin: 0 auto;
padding: 20px;
background-color: #fff;
box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
}
button {
background-color: #4CAF50;
color: #fff;
padding: 10px 20px;
font-size: 18px;
border: none;
border-radius: 5px;
cursor: pointer;
transition: background-color 0.3s ease-in-out;
}
button:hover {
background-color: #45a049;
}
</style>
</head>
<body>
<div class="container">
<h1>注册</h1>
<form method="POST">
<label for="username">Username:</label>
<input type="text" id="username" name="username" required><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required><br><br>
<input type="submit" value="注册">
</form>
</div>
</body>
</html>
代码文件如下:
运行结果如下: