我正在构建我的第一个Flask应用程序,但找不到一种干净利落的Python方式来组织应用程序。我不想像他们的示例一样将所有内容都放在一个.py文件中。我想将我的应用程序的每个部分放在一个单独的模块中。什么是组织事物的好方法?
我正在构建我的第一个Flask应用程序,但找不到一种干净利落的Python方式来组织应用程序。我不想像他们的示例一样将所有内容都放在一个.py文件中。我想将我的应用程序的每个部分放在一个单独的模块中。什么是组织事物的好方法?
Answers:
我创建了一个名为“ Fbone ”的Flask样板项目,请随时检查并进行分叉:)
Fbone(烧瓶骨骼)是Flask(Python微框架)模板/引导程序/样板应用程序。
总览
顺便说一句,我刚刚发现这个用Flask构建大型项目的Wiki非常有用,请检查一下!
fab setup
Warning: Command(s) not found: setup
Flask 0.7实现了蓝图。它们非常适合使用route
装饰器而无需导入主应用程序对象。
templates
和static
文件夹。
我正在(按我的标准)进行一个大的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文件。另外,我基于模块列表生成菜单。按照惯例每个模块都有它自己的Python的模块中controllers/
,将其加载model
从models/
。每个控制器都将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
这样,我可以读取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'])
希望对您有所启发:)
project_name/
)的子目录。还有一个tests/
文件夹和一个scripts/
文件夹(用于可执行脚本)。因为tests/
最好使用与答案相同的结构:tests/models/
对于模型测试,tests/controllers/
对于控制器测试,请为其命名。这将需要一些维护结构的开销,但使查找所需文件变得非常简单。
我在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上查看它。
我从头开始创建了一个Flask应用程序yapper,并将其与gulp集成在一起进行前端和后端开发。它是一个简单的博客引擎,但可以根据需要轻松进行修改以进行开发。使用蓝图可以很好地组织它。
检出项目页面yapper