如何将烧瓶蓝图分解为一个子文件夹中的多个文件?

时间:2019-01-30 16:08:06

标签: python flask

背景

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

/server
    /templates/
    /__init__.py
    /api.py
    /app.py
  • api.py包含已通过名为“ api”的烧瓶蓝图注册的烧瓶路由。
  • 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

问题

如何将烧瓶蓝图分解为一个子文件夹中的多个文件?

1 个答案:

答案 0 :(得分:0)

我知道了:

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

因此,当蓝图在app.py中注册时,它只是在进行from api import api,但是从来没有任何代码会导致account.py和{{1}中的代码}模块开始运行。

解决方案是:

  1. 更新song.py以在顶部包含api/__init__.pyfrom api.account import *
  2. 将蓝图对象的定义移出from api.song import *并移到新的/api/__init__.py文件中,以便所有包含路径的文件(/api/utils.py,{{1 }}和/api/__init__.py)。
    • 这只是防止循环导入错误。