阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Flask 项目工程拆分

132次阅读
没有评论

共计 2719 个字符,预计需要花费 7 分钟才能阅读完成。

一、蓝本 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()

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-05-26发表,共计2719字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中