Как я могу разбить план Flask на несколько файлов в подпапке? - PullRequest
0 голосов
/ 30 января 2019

Фон

У меня есть приложение Flask со структурой папок, которая выглядит примерно следующим образом:

/server
    /templates/
    /__init__.py
    /api.py
    /app.py
  • api.py содержит маршруты Flask, которые зарегистрированы в проекте Flask Blueprint с именем "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

Вопрос

Как я могу разбить план Flask на несколько файлов вподпапка?

1 Ответ

0 голосов
/ 30 января 2019

Я понял:

Проблема заключалась в том, что новый файл api/__init__.py не импортировал маршруты из новых файлов, отличных от __init__.py (/api/account.py и /api/song.py).

Поэтому, когда Blueprint регистрировался в app.py, он просто выполнял from api import api, но не было никакого кода, который бы вызвал запуск кода в модулях account.py и song.py.

Решением было:

  1. обновить api/__init__.py, чтобы включить from api.account import * и from api.song import * вверху.
  2. переместить определение объекта Blueprint из/api/__init__.py и в новый файл /api/utils.py, чтобы его можно было импортировать всеми файлами, содержащими маршрут (/api/__init__.py, /api/account.py и /api/song.py).
    • Это просто предотвращает циклическую ошибку импорта.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...