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()
需要
登录
才可以提问哦
: