如何组织一个相对较大的Flask应用程序?

我正在构build我的第一个Flask应用程序,我无法弄清楚组织我的应用程序的一个好的,干净的Pythonic方法。 我不想像在他们的例子中一样在一个.py文件中。 我想我的应用程序的每个部分在一个单独的模块。 什么是组织事情的好方法?

我创build了一个名为“ Fbone ”的Flask样板工程,请随时查看并分享 🙂

Fbone(Flask bone)是Flask(Python微框架)模板/ bootstrap /样板应用程序。

概观

  • 精心devise的大项目使用蓝图。
  • 整合最热门的前端框架:jQuery / html5boilerplate / bootstrap。
  • 支持着名的SQLalchemy。
  • 通过flask-login实现棘手的“记住我”。
  • 通过flask-platform处理web表单。
  • 用烧瓶testing和鼻子进行unit testing。
  • 通过fabric和mod_wsgi(包含示例)轻松部署。
  • i18n由烧瓶巴贝尔

顺便说一句,我刚刚发现这个维基build设一个大型项目与Flask有用,请检查!

瓶0.7实现蓝图 。 它们非常适合在不导入主应用程序对象的情况下使用route装饰器。

请务必阅读马特·赖特关于这个问题的精彩post

post特点:

  1. 大型烧瓶项目的结构描述

  2. Github上的一个示例应用程序

  3. 一般来说 ,对于大型Web应用程序,如MVC模式,应用程序工厂,服务和数据迁移等(最有趣的function恕我直言) 的最佳devise实践的描述

我正在做一个(通过我的标准)一个大的Flask项目(5000行Python代码,只有一半)。 客户希望项目是模块化的,所以我采取了这个应用程序:

我的文件夹结构如下所示:

 ├── __init__.py ├── modules.yml ├── config ├── controllers │ └── ... ├── lib: Common functions I use often │ └── ... ├── models │ └── ... ├── static: All static files │ ├── css │ ├── img │ └── js └── templates: Jinja2 templates └── ... 

modules.yml我定义了我的模块,包括名称和URL。 通过这种方式,客户可以在不触及单个Python文件的情况下启用/禁用模块。 另外,我根据模块列表生成菜单。 按照惯例,每个模块都有它自己的controllers/的Python模块controllers/将从models/加载它的model 。 每个控制器都定义一个存储为控制器名称的Blueprint 。 例如,对于user模块,我在controllers/user.py

 # Module name is 'user', thus save Blueprint as 'user' variable user = Blueprint('user', __name__) @user.route('/user/') def index(): pass 

这样,我可以读取我的__init__.pymodules.yml ,并dynamic加载和注册所有启用的模块:

 # Import modules for module in modules: # Get module name from 'url' setting, exculde leading slash modname = module['url'][1:] try: # from project.controllers.<modname> import <modname> mod = __import__( 'project.controllers.' + modname, None, None, modname ) except Exception as e: # Log exceptions here # [...] mod = getattr(mod, modname) # Get blueprint from module app.register_blueprint(mod, url_prefix=module['url']) 

我希望,这可以是你的一些灵感:)

我从零开始创build了一个Flask应用程序yapper ,并将其与前端和后端开发的gulp集成在一起。 这是一个简单的博客引擎,但可以根据需要轻松修改以进行开发。 它使用蓝图很好的结构。

检出项目页面yapper

我在一个build立在Flask之上的社交networking上工作。 关于我的项目的特别之处是服务器纯粹服务于API端点,而前端是一个一页的骨干应用程序。 我采取的烧瓶结构如下:

├── app │ ├── api
│ │ ├── auth.py │ │ └── ... │ ├── app.py │ ├── common │ │ ├── constants.py │ │ ├── helpers.py │ │ ├── response.py │ │ └── ... │ ├── config.py │ ├── extensions.py │ ├── frontend │ │ └── controllers.py │ ├── static │ │ └── ... │ ├── templates │ │ ├── app.html │ │ └── ... │ └── users │ ├── UserConstants.py │ ├── UserForms.py │ ├── UserHelpers.py │ ├── UserModels.py │ └── __init__.py ├── alembic | ├── version │ └── ... ├── tests │ └── ...

你可以阅读我在这里写的关于这个话题的更深入的文章。 我发现将不同的function区域分隔到自己的文件夹要直观得多。

前一段时间我在编写代码,并完全开源! 你可以在github上看看。

我写了一篇文章,概述了我如何构build大型Flask应用程序。

它使用蓝图来分离应用程序的function区域,并包含API,表单,模板,configuration等的工作用途。

我还介绍了如何在主项目模块之外运行服务器(python server.py)

http://juzzbott.com.au/2014/03/how-to-structure-a-large-flask-application/

希望这对某些人有用:)