pythonflask项⽬结构规范_Flask项⽬结构
定义
先让⼤家明确⼀些术语,⽅便后⾯的讨论。仓库/版本库 - 应⽤程序所在的基础⽂件夹。习惯上指笨笨控制系统。在⽂章中提到时,指的是项⽬的根⽬录。
包 - 指应⽤代码的⼀个Python包。
模块 - ⼀个模块指能被其他的Python⽂件导⼊的⼀个Python⽂件。⼀个包基本上是打包在⼀起的多个模块。
常⽤扩展(Extensions)
Flask作为微框架(microframework),在开发过程中会经常使⽤各种扩展包。以下是⼀些常⽤扩展包的简介。Flask-SQLAlchemy - 封装了SQLAlchemy,提供ORM
Flask-Migrate - 处理SQLAlchemy数据库的迁移(migrations)
Flask-Script - ⽀持在Flask⾥编写额外的脚本
Flask-Bootstrap - 封装了Bootstrap框架
Flask-Login - 提供账号session管理
Flask-WTF - 封装了WTForms,提供表单功能
Flask-RESTful - 提供快速构建RESTAPIs的能⼒
⽬录结构
⼀般Flask的项⽬结构如下:
├── README.md
├── app
│ ├── __init__.py
│ ├── api
│ │ ├── __init__.py
│ │ └── views.py
│ ├── auth
│ │ ├── __init__.py
│ │ ├── forms.py
│ │ ├── templates
│ │ │ └── auth.html
│ │ └── views.py
│ ├── extensions.py
│ ├── forms.py
│ ├── main
│ │ ├── __init__.py
│ │ ├── errors.py
│ │ ├── models.py
│ │ ├── templates
│ │ │ └── index.html
│ │ └── views.py
│ └── models.py
├── config.py
├── fabfile.py
├── manage.py
├── migrations
├── requirements
│ ├──
│ ├──
│ └──
└── unit_testsREADME.md - 仓库的说明,⽐如该项⽬的介绍等
app - 项⽬的主要功能实现
config.py - 项⽬的配置
fabfile.py - 使⽤Fabric3完成项⽬发布⼯作的脚本
manage.py - 基于Flask-Script扩展的命令⾏脚本
requirements - 该项⽬所依赖的第三⽅包
unit_tests - 单元测试相关代码
组织蓝图
⽬前主要有两种组织⽅式:按照 功能结构 组织。模板在⼀个⽂件夹中,静态⽂件在另外⼀个⽂件夹中,视图在第三个⽂件夹中。
按照 分区 组织。同⼀个功能的模板,静态⽂件,视图都在⼀个⽂件夹内。
两种组织⽅式的优劣并⽆定论,选择⾃⼰喜欢的就好。笔者倾向于按照分区组织,上⽂中的代码也是按照分区进⾏组织的。⽐如api、auth、main三个模块。
将RESTful-api注册为蓝图
当你使⽤前后端分离的架构⽅式时,可考虑如下的⽅式进⾏组织(以上⽂的api⽂件夹为例):
api/views.py
# coding: utf-8
from flask_restful import Api, Resource
api = Api()
@source('/tmp_api')
class TmpApiResource(Resource):
def get(self):
pass
api/__init__.py
# coding: utf-8
from flask import Blueprint
api_bp = Blueprint('api_bp', __name__)
from .views import api
api.init_app(api_bp)
最后将api_bp注册到app上,跟其他蓝图保持⼀致。
组织扩展(Extensions)
bootstrap项目⼀般推荐将所有扩展在app/extensions.py中进⾏实例化,如以下代码:app/extensions.py
# coding: utf-8
from flask_bootstrap import Bootstrap
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
bootstrap = Bootstrap()
db = SQLAlchemy()
login_manager = LoginManager()
login_manager.login_view = 'auth_bp.login'
然后在实例化Flask时,进⾏绑定:
app/__init__.py
# coding: utf-8
import os
from flask import Flask
from config import config
sions import bootstrap, db, login_manager
def create_app(config_name):
app = Flask(__name__)
config[config_name].init_app(app)
bootstrap.init_app(app)
db.init_app(app)
login_manager.init_app(app)
# register blueprint
from .main import main_bp
from .auth import auth_bp as auth_blueprint
from .api import api_bp as api_blueprint
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论