使用flask快速构建web后端项目(上):python、flask、mysql、migrate、sqlalchemy、login、session、scheduler、socket_flask大型项目后端结构-爱代码爱编程
Flask 是一个用 Python 编写的轻量级 Web 应用框架。它设计简单且易于扩展,如果与 Jinja2 模板引擎和 Werkzeug WSGI 工具集结合使用,Flask 可以用来快速开发小型到中型的网站。Flask 鼓励快速开发和简洁的代码,同时保持了扩展性和灵活性。本文旨在如何使用Flask及其相关组件快速构建一个Web后端项目,持续更新中…
〇、前置介绍
- 语言:Python,版本3.8,自行安装,建议使用Conda虚拟环境
conda create -n myenv python=3.8 # myenv更改成自己想创建的虚拟环境的名字 activate myenv # 激活虚拟环境
- 数据库:Mysql,版本最新即可
- Flask及其组件(3.8下最新即可):
- Flask: flask框架本身
- Flask-SQLAlchemy: ORM框架,用来操作数据库表
- Flask-Migrate: 数据库迁移框架,创建数据库表
- Flask-Marshmallow:数据序列化框架
- Flask-APSCheduler: 定时任务框架
- Flask-Session: 存储session的扩展
- Flask-SocketIO: 解决需要websocket的场景
一、安装依赖
- 安装依赖包
pip install flask # 安装flask框架 pip install flask-sqlalchemy # 安装flask-sqlalchemy ORM框架 pip install flask-migrate # 安装flask-migrate 数据库迁移框架 pip install flask-marshmallow # 安装flask-marshmallow 数据序列化框架 pip install flask-apscheduler # 安装flask_apscheduler 定时任务框架 pip install flask-session # 安装flask-session 存储session pip install flask-scoketio # 安装flask-socketio 解决需要websocket的场景 # 以下可选,后期有需求再下载 pip install flask-script # 安装flask-script 命令行工具 pip install flask-admin # 安装flask-admin 后台管理框架 pip install flask-wtf # 安装flask-wtf 表单验证框架 pip install flask-restful # 安装flask-restful RESTful API框架 pip install flask-restful-swagger # 安装flask-restful-swagger RESTful API文档框架
- 说明:
pip install
安装包时对包名的大小写不敏感,而Linux命令对大小写敏感
二、 项目结构
- 创建如下项目结构,亦可自行调整
- 说明:下述提到的
目录
为文件夹,包
为python的包,创建时注意-- project # 项目顶层文件夹 目录 -- apps # 业务模块 包 -- inits # 初始化配置 包 -- models # 模型层 包 -- schemas # 序列化 包 -- common # 公共方法 包 -- views # 视图层 包 -- __init__.py # 初始化文件, 内部定义创建app的方法 -- config.py # 配置文件 -- static # 静态文件 目录 -- templates # 模板文件 目录 -- db # 数据库脚本文件 目录 -- doc # 文档文件 目录 -- app.py # 入口文件
三、创建APP
-
在
config.py
中添加如下配置类,将flask相关配置都封装到一个类里,方便维护# project.apps.config.py # 下述配置文件定义不同环境的配置类,使用时导入响应的类即可 # 本例中只给出了密钥、数据库的配置,后期有session、login、scheduler方面的配置再加入即可 from flask import Config # 共公配置 class BaseConfig(Config): SECRET_KEY = 'xxxxxx' MYSQL_HOST = 'localhost' MYSQL_PORT = 3306 MYSQL_USER = 'root' MYSQL_PASSWORD = 'xxxxxx' ADMIN_DB = 'admin' # 管理员数据库 注意:需要提前创建该数据库, 如 create database `admin` default charset utf8mb4 collate utf8mb4_unicode_ci; BUSINESS_DB = 'business' # 业务数据库 注意:需要提前创建该数据库 # 配置数据库连接信息,flask默认的数据库:SQLALCHEMY_DATABASE_URI SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(MYSQL_USER, MYSQL_PASSWORD, MYSQL_HOST, MYSQL_PORT, BUSINESS_DB) # 其他数据库,使用SQLALCHEMY_BINDS命名的一个字典,key为数据库在项目中的名称,value为连接串 SQLALCHEMY_BINDS = { 'admin': 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(MYSQL_USER, MYSQL_PASSWORD, MYSQL_HOST, MYSQL_PORT, ADMIN_DB) } # 开发配置类 class DevConfig(BaseConfig): DEBUG = True # 生产配置类 class ProConfig(BaseConfig): DEBUG = False
-
在MySQL中创建
admin
和business
数据库create database if not exists `admin` default charset utf8mb4 collate utf8mb4_general_ci; create database if not exists `business` default charset utf8mb4 collate utf8mb4_general_ci;
-
在
apps.__init__.py
初始化文件内部定义创建app的方法# project.apps.__init__.py from flask import Flask from apps.config import DevConfig # 假设这里是开发环境,我们导入开发环境的配置类 def create_app(): app = Flask(__name__) # 引入配置 app.config.from_object(DevConfig) return app
-
在
app.py
入口文件中填入以下代码,用于启动项目# project.app.py from apps import create_app app = create_app() if __name__ ==