Flask app中的常见文件夹/文件结构

kas*_*rhj 57 python flask

我刚刚创建了一个烧瓶应用程序,到目前为止我有一个路由器用于我的"Hello world!" 模板.

我想添加一些(很多)更多功能,但我想知道我应该如何构建app目录.

构建Flask应用程序最常用的方法是什么?例如,我应该为我的routes.py所有路线创建一个吗?SQLAlchemy的东西在哪里?模特应该在models.py吗?

dir*_*irn 33

您应该查看Flask文档的Patterns部分中的Larger Applications页面:http://flask.pocoo.org/docs/patterns/packages/.它似乎是大多数人在应用程序调用包而不是模块时遵循的模型.

我相信views.py你的意思routes.py.之后,模型会进入models.py,表格会进入forms.py,等等.

  • 我不明白,为什么我们所有模型只有一个文件?“每个文件一个班级”的做法怎么样?如果有些模型很大怎么办?我们是否应该将一些逻辑移到其他模块中?而且,如果我希望我的模型在单独的文件中,我应该只创建一个模块“模型”吗?谢谢! (3认同)
  • 我认为当项目增长时每个文件一个类很棒,但如果你只有 2-3 个为什么还要麻烦。您可以随时在需要时拆分它们。我的指导方针是,当它适合我的 19" 屏幕时,它很快就可以了,因为我需要滚动,我拆分... (2认同)

sim*_*cci 15

FlaskApp目录的示例:

yourapp/  
    /yourapp  
        /run.py  
        /config.py  
        /yourapp  
            /__init__.py
            /views.py  
            /models.py  
            /static/  
                /main.css
            /templates/  
                /base.html  
        /requirements.txt  
        /yourappenv
Run Code Online (Sandbox Code Playgroud)

run.py - 包含将导入应用程序并启动开发服务器的实际python代码.
config.py - 存储您的应用程序的配置.
__init__.py - 初始化您的应用程序,创建Flask应用程序实例.
views.py- 这是routes定义的地方.
models.py - 这是您为应用程序定义模型的地方.
static-包含静态文件,即CSS,Javascript,图片
templates-这是您存储html模板,即index.html,layout.html
requirements.txt-这就是你存储你的包依赖关系,您可以使用pip
yourappenv-你的虚拟环境对于发展


Moh*_*ati 10

我认为flask是微框架,现在你必须决定如何创建文件和文件夹.

我用这种方式:

这是靠近Django结构

我建议你看一些项目给你你想要的东西


Kim*_*kka 10

我会说,如果你拆分应用程序使用分区而不是功能结构.我提倡这一点,因为你更有可能在任何时候使用其中一个部门组件.

这种类型的结构非常适合市场或SaaS应用程序,其中不同的用户组使用不同类型的视图.API only flask app我可能会使用功能拆分.

以下是Flask Blueprints的示例.蓝图基本上是文档建议如何拆分Flask应用程序以获得更易于管理的部分.更多相关信息,请访问:http://exploreflask.com/en/latest/blueprints.html

这是分区拆分的一个例子.了解每个功能如何组合在一起.

yourapp/
    __init__.py
    admin/
        __init__.py
        views.py
        static/
        templates/
    home/
        __init__.py
        views.py
        static/
        templates/
    control_panel/
        __init__.py
        views.py
        static/
        templates/
    models.py
Run Code Online (Sandbox Code Playgroud)

这是功能性示例>

yourapp/
    __init__.py
    static/
    templates/
        home/
        control_panel/
        admin/
    views/
        __init__.py
        home.py
        control_panel.py
        admin.py
    models.py
Run Code Online (Sandbox Code Playgroud)


Nuh*_*man 6

任何为烧瓶项目寻找简单的初学者友好结构的人都可能会发现这很有帮助:

   |__movies 
     |__run.py 
     |__app     
        ??? templates
        ?   ??? index.html
        ?   ??? signup.html
        ??? __init__.py
        ??? routes.py
Run Code Online (Sandbox Code Playgroud)

这里的“电影”是主应用程序的名称。它包含“ run.py ”和一个名为“ app ”的文件夹。“应用程序”文件夹包含所有必要的文件烧瓶诸如“模板”文件夹,“ __init __.py ”和“ routes.py ”。

内容:

运行.py

from app import app
Run Code Online (Sandbox Code Playgroud)

__init.py__

from flask import Flask

app = Flask(__name__)

from app import routes


app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

路线.py

from app import app

@app.route('/')
@app.route('/index')
def index():
    return "Hello, World!"
Run Code Online (Sandbox Code Playgroud)

  • 那么如何避免循环依赖呢?这种布局和文件结构需要哪些修改? (2认同)

jet*_*com 5

您可以从此处的cookiecutter模板中获得启发,从而快速启动应用程序开发


use*_*erx 5

烧瓶的美在于它的灵活性。您可以轻松构建类似项目结构的 django。Django 普及了应用程序中功能的抽象并使它们可重用,但对于许多项目来说这可能是一种矫枉过正。

但是有了烧瓶,你可以走任何一条路。编写可重复使用的应用程序或编写简单的应用程序。检查这些千篇一律的骨架-

  1. 最小骨架

    myproject ??? config.py ??? instance ?   ??? config.py ??? myproject ?   ??? commands.py ?   ??? controllers.py ?   ??? extensions.py ?   ??? forms.py ?   ??? __init__.py ?   ??? models.py ?   ??? routes.py ?   ??? ui ?   ??? static ?   ?   ??? css ?   ?   ?   ??? styles.css ?   ?   ??? js ?   ?   ??? custom.js ?   ??? templates ?   ??? index.html ??? README.md ??? requirements.txt ??? wsgi.py

  2. django 像骨架

    myproject ??? config.py ??? development.py ??? instance ?   ??? config.py ??? myproject ?   ??? auth ?   ?   ??? controllers.py ?   ?   ??? forms.py ?   ?   ??? __init__.py ?   ?   ??? models.py ?   ?   ??? routes.py ?   ??? helpers ?   ?   ??? controllers.py ?   ?   ??? __init__.py ?   ?   ??? models.py ?   ??? __init__.py ?   ??? ui ?   ??? templates ?   ??? 404.html ?   ??? 500.html ?   ??? base.html ??? README.md ??? requirements.txt ??? tests ?   ??? auth ?   ?   ??? __init__.py ?   ?   ??? test_controllers.py ?   ??? __init__.py ??? wsgi.py

这是一篇关于这方面的优秀文章