Как правильно подключать import'ы во Flask?

Есть следующая структура проекта:
  • app
    • __init__.py
    • items.py
    • REST
      • __init__.py
      • books.py






app/__init__.py
from app.REST import mod_books

app = Flask(__name__)
db = SQLAlchemy(app)

app.register_blueprint(mod_books, url_prefix='/books')


app/REST/__init__.py
mod_books = Blueprint("books", __name__)
books_api = restful.Api(mod_books)

from app.REST import books


app/REST/books.py
from app.REST import books_api
from app import db
from app.items import Book, Author

...
class BooksListApi(Resource):
...
books_api.add_resource(BooksListApi, '/')
...


В двух словах: в app есть объект db, в app.REST объявлен blueprint, который импортируется и подключается в app

Мне нужно получить доступ из app.REST.books к объекту db из app, чтобы работать с базой данных.

Как можно правильно оформить эту структуру, чтобы не возникало цикличных зависимостей?
  • Вопрос задан
  • 2642 просмотра
Пригласить эксперта
Ответы на вопрос 2
Teivaz
@Teivaz
Я только вчера столкнулся с этой проблемой.
Достаточно в одном месте написать не from A import B, а from A import *, например, в REST/books.py:
from app import *
Ответ написан
Комментировать
@ykalchevskiy
Посмотрите в сторону этих репозиториев:
https://github.com/sloria/cookiecutter-flask
https://github.com/imwilsonxu/fbone

В них более сложная структура проекта, но и более удобная. Логически разделены: создание приложение, создание расширений, регистрация Blueprints и расширений и многое другое. Посмотрите в файлы "app.py". Сначала это может показаться оверхедом, но поверьте, практически наверняка, ваш проект разрастется, добавятся новые части, но эта структура останется неизменной, и проект будет выглядеть стройно и понятно.
Первый репозиторий особенно хорош тем, что он является шаблоном для cookiecutter (https://github.com/audreyr/cookiecutter). Если вы не сталкивались с этим приложением, то обязательно попробуйте, так как это может сильно упростить создание начальной структуры проектов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
06 мая 2024, в 16:06
100000 руб./за проект
06 мая 2024, в 15:53
2500 руб./за проект
06 мая 2024, в 15:52
30000 руб./за проект