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

dan*_*els 74 python flask

我正在构建我的第一个Flask应用程序,我无法找到一个好的,干净的Pythonic方式来组织我的应用程序.我不希望在他们的示例中将所有内容都放在单个.py文件中.我想将我的应用程序的每个部分都放在一个单独的模块中.什么是组织事物的好方法?

imw*_*nxu 82

我创建了一个名为" Fbone " 的Flask样板项目,请随时查看并分叉:)

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

概观

  • 精心设计的大型项目使用蓝图.
  • 与最热门的前端框架集成:jQuery/html5boilerplate/bootstrap.
  • 由着名的SQLalchemy支持.
  • 通过flask-login实现棘手的"记住我".
  • 通过flask-wtform处理网状形式.
  • 用烧瓶测试和鼻子进行单元测试.
  • 通过结构和mod_wsgi轻松部署(包括示例).
  • 我用烧瓶 - 巴贝尔

顺便说一句,我刚刚发现这个维基建立一个Flask有用的大项目,请检查一下!


Ale*_*ega 20

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


eds*_*ufi 17

一定要阅读 Matt Wright 关于这个主题的精彩帖子.

帖子功能:

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

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

  3. 关于大型Web应用程序的一般最佳设计实践的描述,例如MVC模式,App工厂,服务和数据迁移,仅​​举几例(最有趣的功能IMHO).


msi*_*ens 12

我正在研究(根据我的标准)大型Flask项目(5000行Python代码,它只有一半完成).客户希望项目是模块化的,所以我拿了这个apporach:

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

??? __init__.py
??? modules.yml
??? config
??? controllers
?   ??? ...
??? lib: Common functions I use often
?   ??? ...
??? models
?   ??? ...
??? static: All static files
?   ??? css
?   ??? img
?   ??? js
??? templates: Jinja2 templates
    ??? ...
Run Code Online (Sandbox Code Playgroud)

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

# Module name is 'user', thus save Blueprint as 'user' variable
user = Blueprint('user', __name__)

@user.route('/user/')
def index():
    pass
Run Code Online (Sandbox Code Playgroud)

这样,我可以modules.yml在我的内容中__init__.py读取并动态加载和注册所有已启用的模块:

# 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'])
Run Code Online (Sandbox Code Playgroud)

我希望,这可以为你带来一些灵感:)


spc*_*ang 5

我在一个建立在 Flask 之上的社交网络上工作。我的项目的特别之处在于服务器纯粹为 API 端点提供服务,而前端是一个单页的 Backbone 应用程序。我采用的 Flask 结构如下:

??? 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 ? ??? ...

你可以在这里阅读我写的关于这个主题的更深入的帖子。我发现将不同的功能区域分开到自己的文件夹中要直观得多。

我前段时间研究过代码并完全开源!你可以在 github 上查看。