我正在构建我的第一个Flask应用程序,我无法找到一个好的,干净的Pythonic方式来组织我的应用程序.我不希望在他们的示例中将所有内容都放在单个.py文件中.我想将我的应用程序的每个部分都放在一个单独的模块中.什么是组织事物的好方法?
imw*_*nxu 82
我创建了一个名为" Fbone " 的Flask样板项目,请随时查看并分叉:)
Fbone(Flask bone)是Flask(Python微框架)模板/ bootstrap /样板应用程序.
概观
顺便说一句,我刚刚发现这个维基建立一个Flask有用的大项目,请检查一下!
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)
我希望,这可以为你带来一些灵感:)
我在一个建立在 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 上查看。