2013-01-19 55 views
39

我刚刚创建了一个烧瓶应用程序,到目前为止,我的“Hello world!”有一个路由器。模板。Flask应用程序中的常用文件夹/文件结构

我想添加一些(很多)更多的功能,但我不知道如何构建应用程序目录。

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

回答

25

您应该查看Flask文档的Patterns部分中的Larger Applications页面:http://flask.pocoo.org/docs/patterns/packages/。这似乎是大多数人在应用程序调用包而不是模块时遵循的模型。我相信views.py就是你所说的routes.py。之后,模型将在models.py,形式将进入forms.py

+1

我不明白的是,为什么我们只有一个文件,为所有的车型? “每档一档”练习呢?如果某些模型相当大?我们是否应该将一些逻辑转移到其他模块中?而且,如果我想让我的模型处于单独的文件中,我应该只创建一个模型“模型”?谢谢! – lime

+0

@lime,当有更多的模型时如何构建项目?我可以帮助我。 –

+1

@lime我不是“每个文件一个类的粉丝”。我发现更长,重复的导入路径非常麻烦。除非将所有内容都导入到'__init __。py'文件中,否则这些导入文件会导致很多额外的导入操作,从而导致难以维护。也就是说,你可以自由地构建你的项目,但是你愿意。我只是提供许多人遵循的会议。 – dirn

7

FlaskApp目录的示例:

yourapp/ 
    /yourapp 
     /run.py 
     /config.py 
     /yourapp 
      /__init__.py 
      /views.py 
      /models.py 
      /static/ 
       /main.css 
      /templates/ 
       /base.html 
     /requirements.txt 
     /yourappenv 

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

+0

对于'require.txt'和'venv'。 –

4

我想说,如果你分割应用程序中使用分区,而不是功能结构。 我提倡这一点,因为您在任何时候都更有可能在这些部门组件中的一个上工作。

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

以下是来自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 

这里是功能实例>

yourapp/ 
    __init__.py 
    static/ 
    templates/ 
     home/ 
     control_panel/ 
     admin/ 
    views/ 
     __init__.py 
     home.py 
     control_panel.py 
     admin.py 
    models.py