Flask后端项目构建指南(上):集成Python、Flask、Mysql、Migrate、SQLAlchemy及Login、Session、Scheduler与Socket技术

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的场景
  • 一、安装依赖

    1. 安装依赖包
      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文档框架
      
    2. 说明:pip install 安装包时对包名的大小写不敏感,而Linux命令对大小写敏感

    二、 项目结构

    1. 创建如下项目结构,亦可自行调整
    2. 说明:下述提到的目录为文件夹,为python的包,创建时注意
      -- project  # 项目顶层文件夹   目录
          -- apps   # 业务模块   包
              -- inits  # 初始化配置   包
              -- models  # 模型层   包
              -- schemas  # 序列化   包
              -- common  # 公共方法   包
              -- views  # 视图层    包
              -- __init__.py   # 初始化文件, 内部定义创建app的方法
              -- config.py  # 配置文件
          -- static  # 静态文件  目录
          -- templates  # 模板文件  目录
          -- db  # 数据库脚本文件   目录
          -- doc  # 文档文件  目录
          -- app.py   # 入口文件
      

    三、创建APP

    1. 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
      
    2. 在MySQL中创建adminbusiness数据库

      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;
      
    3. 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
      
    4. app.py入口文件中填入以下代码,用于启动项目

      # project.app.py
      
      from apps import create_app
      
      
      app = create_app()
      
      
      if __name__ == 

    作者:千层冷面

    物联沃分享整理
    物联沃-IOTWORD物联网 » Flask后端项目构建指南(上):集成Python、Flask、Mysql、Migrate、SQLAlchemy及Login、Session、Scheduler与Socket技术

    发表回复