在 Flask 中集成 MySQL 数据库进行用户管理是一个常见的项目需求。下面将提供一个基础的步骤和代码示例来理解如何从零开始搭建这样一个系统。
1. 环境准备
首先确保你已经安装了 Python 和必要的包。你需要安装 Flask 和用于连接 MySQL 的包 Flask-SQLAlchemy
或者 Flask-Mysqldb
。这里我们使用 Flask-SQLAlchemy
,因为它提供了更高级的对象关系映射(ORM)功能。
在你的终端中运行以下命令来安装必要的包:
pip install flask flask-sqlalchemy
2. 创建项目结构
假设你的项目目录如下:
my_flask_app/app.pystatic/templates/myapp/__init__.pymodels.pyforms.pyroutes.py
3. 配置 Flask 应用
在 app.py
文件中设置 Flask 应用和数据库配置:
from flask import Flask
from myapp import modelsapp = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/db_name'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Falsemodels.db.init_app(app)if __name__ == '__main__':with app.app_context():models.db.create_all()app.run(debug=True)
4. 定义模型
在 models.py
中定义你的数据库模型:
from flask_sqlalchemy import SQLAlchemy
from werkzeug.security import generate_password_hash, check_password_hashdb = SQLAlchemy()class User(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(80), unique=True, nullable=False)password = db.Column(db.String(120), nullable=False)def set_password(self, password):self.password = generate_password_hash(password)def check_password(self, password):return check_password_hash(self.password, password)
5. 创建表单
在 forms.py
中使用 WTForms 创建表单:
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length, ValidationError
from myapp.models import Userclass RegistrationForm(FlaskForm):username = StringField('Username', validators=[DataRequired(), Length(min=4, max=80)])password = PasswordField('Password', validators=[DataRequired()])submit = SubmitField('Register')def validate_username(self, username):user = User.query.filter_by