馒头框架(Flask-Migrate)是一个基于Flask的Web应用框架,它可以帮助开发者轻松地管理数据库迁移。在这个教程中,我们将使用馒头框架来实现一个简单的用户认证系统。通过学习这个过程,你将掌握如何使用馒头框架来创建用户模型、设置用户认证以及处理登录逻辑。
安装馒头框架
首先,确保你已经安装了Python环境。然后,使用pip命令安装馒头框架:
pip install Flask-Migrate
创建项目结构
创建一个名为myapp的目录,并在其中创建以下文件:
myapp/
│
├── app.py
├── migrations/
│ └── __init__.py
└── models.py
配置数据库
在models.py中,首先导入必要的模块,并设置数据库连接:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///myapp.db'
app.config['SECRET_KEY'] = 'your_secret_key'
db = SQLAlchemy(app)
migrate = Migrate(app, db)
创建用户模型
接下来,定义一个用户模型,用于存储用户信息:
from werkzeug.security import generate_password_hash, check_password_hash
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password_hash = db.Column(db.String(128))
def set_password(self, password):
self.password_hash = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.password_hash, password)
创建用户表
使用馒头框架的迁移功能来创建用户表:
flask db init
flask db migrate -m "Initial migration."
flask db upgrade
实现登录逻辑
在app.py中,实现登录逻辑:
from flask import Flask, request, redirect, url_for, render_template, flash
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'
login_manager = LoginManager()
login_manager.init_app(app)
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
@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).first()
if user and user.check_password(password):
login_user(user)
return redirect(url_for('index'))
else:
flash('Invalid username or password')
return render_template('login.html')
@app.route('/logout')
@login_required
def logout():
logout_user()
return redirect(url_for('login'))
@app.route('/')
@login_required
def index():
return f'Hello, {current_user.username}!'
if __name__ == '__main__':
app.run(debug=True)
创建登录页面
创建一个名为templates/login.html的文件,用于显示登录表单:
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
<h2>Login</h2>
<form method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username" required>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required>
<button type="submit">Login</button>
</form>
</body>
</html>
运行应用
现在,你可以启动应用并访问http://127.0.0.1:5000/login来测试登录功能。
通过这个教程,你学习了如何使用馒头框架创建一个简单的用户认证系统。你可以根据需要扩展这个示例,例如添加注册功能、密码重置等功能。祝你学习愉快!
