组团学

Flask 项目工程拆分

阅读 (185266)

一、蓝本 blueprint

  • 说明

    当我们的代码越来越复杂时,将所有的视图函数放在一个文件中很明显时不合适的;如果能够根据功能模块进行划分,存储在不同的文件中,蓝本就是为解决此问题而生的

  • 使用

    创建user.py

    from flask import Blueprint # 创建蓝本对象 user = Blueprint('user', __name__) # 添加路由(视图函数) @user.route('/login/') def login(): return '欢迎登录'

    manage.py

    from flask import Flask from user import user # 导入蓝本对象user app = Flask(__name__) # 注册蓝本对象 app.register_blueprint(user) app.register_blueprint(user, url_prefix='/user') if __name__ == '__main__': app.run()
  • 访问

    http://127.0.0.1:5000/login/

    http://127.0.0.1:5000/user/login/

2、目录结构

project/ --|app.py 初始化整个应用的文件 --|configs 配置目录 --|--|__init__.py 声明configs为一个包 --|--|defaultConfig.py 默认配置模块 --|--|developmentConfig.py 开发环境配置模块 --|--|productionConfig.py 生产环境配置模块 --|--|testingConfig.py 测试配置模块 --|exts 加载第三方扩展库目录 --|--|__init__.py 声明exts为一个包 --|--|db.py 操作数据库的模块 --|myApp 包含整个应用文件目录 --|--|__init__.py 声明myApp为一个包 --|--|api 包含所有蓝本文件的目录 --|--|--|__init__.py 声明api为一个包 --|--|index.py 包含首页操作的视图蓝本文件 --|--|models 包含所有模型文件的目录 --|--|--|__init__.py 声明models为一个包 --|static 静态资源目录 --|--|img 图片文件 --|--|css css样式文件 --|--|js js文件 --|templates 模板目录 --|manage.py 工程启动文件

3、操作

  • myApp 应用

    在工程目录下创建包目录(目前起名为myApp,以后视情况而修改)

  • api 路由视图

    解决:flask提供的解决方案是蓝图

    在应用目录下创建名为api的包目录:

    • __init__.py

      from .main import main

    • main.py

      # 蓝图类 from flask import Blueprint main = Blueprint("main", __name__) @main.route('/') def hello_world(): return 'lucky is a good man'
    • 在app.py文件中注册蓝图对象

  • exts 导出

    作用:一般三方对象在该目录下定义

    • 在工程目录下创建名为exts的包目录

      • __init__.py

        作用:导出三方对象

        示例:from exts.db import db

      • 数据库对象

        在exts目录下创建名为db.py文件

        from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy()
    • 在app.py文件中加载三方对象

  • configs 配置文件

    • 位置:在工程目录下创建名为configs的包目录

    • __init__.py

      from .developmentConfig import DevelopmentConfig from .productionConfig import ProductiongConfig from .testingConfig import TestingConfig
    • defaultConfig.py 基本配置

      class DefaultConfig(): SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:lucky@127.0.0.1:3306/lucky" SQLALCHEMY_TRACK_MODIFICATIONS = False
    • developmentConfig.py 开发配置

      from configs.defaultConfig import DefaultConfig class DevelopmentConfig(DefaultConfig): DEBUG = True TESTING = False
    • productionConfig.py 生产配置

      from configs.defaultConfig import DefaultConfig class ProductiongConfig(DefaultConfig): DEBUG = False TESTING = False
    • testingConfig.py 测试配置

      from configs.defaultConfig import DefaultConfig class TestingConfig(DefaultConfig): DEBUG = False TESTING = True
    • 在app.py文件中注册配置

  • models 模型

    位置:在应用目录下创建名为models的包目录

    说明:一个模型就是一个py文件

    __init__.py:导出所有的模型

  • app.py

    位置:在工程目录下创建名为app.py的文件

    from flask import Flask #引入蓝图对象 from myApp.api import main from exts import db from configs import DevelopmentConfig from configs import ProductiongConfig from configs import TestingConfig def create_app(name): app = Flask(name) #加载配置 app.config.from_object(DevelopmentConfig) #加载三方对象 db.init_app(app) #注册蓝图 app.register_blueprint(main) return app
  • manage.py 工程启动文件

    位置:在应用目录下创建名为manage.py模块

    from flask_script import Manager from app import create_app app = create_app(__name__) manager = Manager(app) if __name__ == '__main__': manager.run()
需要 登录 才可以提问哦