【问题标题】:How can I break up a Flask Blueprint into multiple files within a subfolder?如何将 Flask 蓝图拆分为子文件夹中的多个文件?
【发布时间】:2019-01-30 16:08:05
【问题描述】:

背景

我有一个 Flask 应用,其文件夹结构大致如下:

/server
    /templates/
    /__init__.py
    /api.py
    /app.py
  • api.py 包含使用名为“api”的 Flask 蓝图注册的 Flask 路由。
  • app.py 是我想启动 Flask 应用程序时运行的文件。

目标

我想把 api.py 文件拆分成多个文件,这样结构如下:

/server
    /api/
        /__init__.py
        /account.py
        /song.py
    /app.py
    /templates/

问题

但是,当我这样做时,当访问这些新文件中的任何路由时,我会收到“查看函数未返回响应”错误:

[2019-01-30 07:58:32,940] ERROR in app: Exception on /api/app/load/ [GET]
Traceback (most recent call last):
  File "C:\Users\Nathan\Documents\rhymecraft\server\venv\lib\site-packages\flask\app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\Nathan\Documents\rhymecraft\server\venv\lib\site-packages\flask\app.py", line 1615, in full_dispatch_request
    return self.finalize_request(rv)
  File "C:\Users\Nathan\Documents\rhymecraft\server\venv\lib\site-packages\flask\app.py", line 1630, in finalize_request
    response = self.make_response(rv)
  File "C:\Users\Nathan\Documents\rhymecraft\server\venv\lib\site-packages\flask\app.py", line 1725, in make_response
    raise ValueError('View function did not return a response')
ValueError: View function did not return a response

问题

如何将 Flask 蓝图拆分为子文件夹中的多个文件?

【问题讨论】:

  • 您在哪里注册您的蓝图?引发错误的视图函数是什么?我不确定是否有足够的信息可以按原样回答这个问题
  • @roganjosh re #1 - 蓝图对象在/api/__init__.py 中创建并在app.py 中注册。 re: #2 - 这是/api/song.py 中的一个视图函数,可以将一首歌曲加载到前端。

标签: python flask


【解决方案1】:

我想通了:

问题是新的api/__init__.py 文件没有从新的非__init__.py 文件(/api/account.py/api/song.py)导入路由。

所以当蓝图在app.py 中注册时,它只是在执行from api import api,但从来没有任何代码会导致account.pysong.py 模块中的代码运行。

解决办法是:

  1. 更新 api/__init__.py 以在顶部添加 from api.account import *from api.song import *
  2. 将蓝图对象的定义从/api/__init__.py 移出到一个新的/api/utils.py 文件中,以便它可以被所有包含路由的文件(/api/__init__.py/api/account.py/api/song.py)导入.
    • 这只是防止循环导入错误。

【讨论】:

    猜你喜欢
    • 2013-07-14
    • 2017-05-20
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2023-03-15
    • 2021-04-27
    • 2014-08-14
    相关资源
    最近更新 更多