定义

先让大家明确一些术语,方便后面的讨论。仓库/版本库 - 应用程序所在的基础文件夹。习惯上指笨笨控制系统。在文章中提到时,指的是项目的根目录。

包 - 指应用代码的一个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

│ ├── common.txt

│ ├── dev.txt

│ └── prod.txt

└── 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()

@api.resource('/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)

一般推荐将所有扩展在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

from app.extensions import bootstrap, db, login_manager

def create_app(config_name):

app = Flask(__name__)

app.config.from_object(config[config_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

app.register_blueprint(main_bp)

from .auth import auth_bp as auth_blueprint

app.register_blueprint(auth_blueprint)

from .api import api_bp as api_blueprint

app.register_blueprint(api_blueprint, url_prefix='/api')

return app

python flask项目结构_Flask项目结构相关推荐

  1. 从零开始搭建python flask+vue 小型web项目以及flask_sqlalchemy访问数据库

    重零开始搭建python flask+vue 小型web项目以及flask_sqlalchemy访问数据库 前言 作者是一个前端开发者,之前从未接触过python,也没接触过后端开发,所有这篇文章中有 ...

  2. python flask框架教程_Flask框架从入门到实战

    Flask简介: Flask是一个使用 Python 编写的轻量级 Web 应用框架,基于 WerkzeugWSGI工具箱和 Jinja2模板引擎.使用 BSD 授权. Flask也被称为 " ...

  3. python flask跨域_Flask框架踩坑之ajax跨域请求实现

    Python flask ajax 请夜影驱动编程小编今天和大家分享后端并且能获得数据,但是...@app.route('/search',methods=[ 'POST']) def search( ...

  4. 使用Python+Flask开发博客项目,并实现内网穿透

    前言 Flask是一个使用python编写的轻量级Web框架,对比其他相同类型的框架而言,这个框架更加的灵活轻便.并且具有很强的定制性,用户可以根据自己的需求添加功能,有强大的插件库,这也是为什么这个 ...

  5. 【Flask】YOLO挖掘机目标检测模型Python flask部署(附项目链接)

    我是一个甜甜的大橙子

  6. python flask热更新_Flask 框架小记

    Flask 框架小记 Flask 实例 创建示例的代码 from flask import Flask # __name__ 是模块名, 用于反射导入模块 app = Flask(__name__, ...

  7. python flask热更新_flask常用操作

    # 安装Flask pip install Flask #flask==1.0.2指定版本 # 基础示例 from flask import Flask app=Flask(__name__) #(不 ...

  8. python flask框架优点_flask框架有什么用

    Flask框架的特点 1.轻巧 2.简洁 3.扩展性强(个人认为最重要的特点) 4.核心(werkzeug和jinja2)jinja2就是指模板引擎. Flask确实很"轻",不愧 ...

  9. python flask框架实例_Flask框架的一个小案例

    这个案例简单的实现了Flask框架的原理,运用python中的Flask框架从数据库中提取数据,前端页面运用echarts渲染 后端代码: from flask import Flask,render ...

最新文章

  1. 设置flashfxp选中ftp密码的时候显示出来看
  2. Vbox共享文件夹不显示了
  3. 怎么将jsp中var报错_招聘中不得将全日制作为限制性条件,怎么就不公平了?
  4. cannot import name 'etree' from 'lxml'
  5. ASP调用带参数存储过程的几种方式
  6. Adapter (适配器模式)
  7. 【深度学习】编写同时在PyTorch和Tensorflow上工作的代码
  8. 数据挖掘实践(金融风控)
  9. PostgreSQL学习笔记6之函数和操作符二
  10. 【学习笔记】JavaScript基础(一)
  11. 标准化工作及相关组织
  12. SQL Server 中的 JSON 数据
  13. 插槽作用域渲染按钮开关 ~ 满满的干货哦
  14. mysql 时间查询_MYSQL按时间段查询语句大全
  15. 华为手机怎么使用读卡器_华为G7手机OTG功能详细使用教程
  16. Ubuntu20.04 截图工具推荐
  17. 各种比例尺图幅号计算excel表格
  18. 【数据结构】AOE网——关键路径
  19. c语言中整型常量和实型常量的写法
  20. 计算机cpu占用率高,CPU占用率高的原因及解决方法

热门文章

  1. matlab中的bsxfun
  2. 获取下一个周几的日期
  3. 第十七届全国大学智能车竞赛百度智慧交通组获奖名单
  4. 乘法运算中的有效数据位
  5. 使用线性回归构建房价预测模型
  6. 黑马python2019吾爱破解_2019KCTF 南充茶坊(python逆向)
  7. Oracle 10g的闪回机制
  8. JavaScript 为什么能活到现在?
  9. 处理textarea的空格和换行
  10. java 交流群 14187321 欢迎java爱好者参与