Использование Flask-SQLAlchemy в моделях Blueprint без ссылки на приложение [закрыто]

я пытаюсь создатьмодульное приложение " в колбе с помощью чертежей.

Однако при создании моделей ям сталкивается с проблемой необходимости ссылаться на приложение, чтобы получитьdb-объект, предоставленный Flask-SQLAlchemy. Я'Я хотел бы иметь возможность использовать некоторые чертежи с несколькими приложениями (аналогично тому, как можно использовать приложения Django), так что это не очень хорошее решение. *

Это'можно сделать switcharoo, и Blueprint создатьdb экземпляр, который приложение затем импортирует вместе с остальной частью проекта. Но тогда любой другой проект, желающий создавать модели, необходимо импортировать изтот план вместо приложения.

Мои вопросы таковы:

Есть ли способ позволить Blueprints определять модели, не зная о приложении, которое онииспользуется позже - и несколько чертежей собрались вместе? Под этим я подразумеваю необходимость импортировать модуль приложения / пакет из вашего Blueprint.Я ошибаюсь с самого начала? Чертежи не предназначены для того, чтобы быть независимыми от приложения и быть распространяемыми ( La Django Apps)?Если нет, то какой шаблондолжен Вы используете, чтобы создать что-то подобное? Расширение колб? Если вы просто не сделаете этого - и, возможно, централизуете все модели / схемы à ла Ruby on Rails?

редактировать: ЯЯ думал об этом сейчас сам, и это может быть больше связано с SQLAlchemy, чем Flask, потому что вы должны иметьdeclarative_base() при объявлении моделей. А такжеэто в любом случае должен прийти откуда-то!

Возможно, лучшее решение - это иметь свой проект »Схема определена в одном месте и распространена, как в Ruby on Rails. Декларативные определения классов SQLAlchemy действительно больше похожи на schema.rb, чем на Django 's models.py. Я полагаю, что это также облегчит использование миграций (изперегонный куб или жеSQLAlchemy-мигрирует).

Меня попросили привести пример, так что давайтесделать что-то простое: скажем, у меня есть план с описанием "flatpages» -- просто, "статический» содержимое хранится в базе данных. Он использует таблицу с кратким названием (для URL), заголовком и телом. Это :simple_pages/__init__.py

from flask import Blueprint, render_template
from .models import Page

flat_pages = Blueprint('flat_pages', __name__, template_folder='templates')

@flat_pages.route('/')
def show(page):
    page_object = Page.query.filter_by(name=page).first()
    return render_template('pages/{}.html'.format(page), page=page_object)

Тогда было бы неплохо позволить этому проекту определить свою собственную модель (это вsimple_page/models.py):

# TODO Somehow get ahold of a `db` instance without referencing the app
# I might get used in!

class Page(db.Model):
    name = db.Column(db.String(255), primary_key=True)
    title = db.Column(db.String(255))
    content = db.Column(db.String(255))

    def __init__(self, name, title, content):
        self.name = name
        self.title = title
        self.content = content

Этот вопрос связан с:

Импорт в Flask-SQLAlchemy / проблема контекстаКакие'Разметка вашей папки для приложения Flask разделена на модули?

И другие, но все ответы, кажется, полагаются на импорт приложенияdb Например, или делать наоборот. "Большое приложение как Вики-страница также использует "импортировать ваше приложение в свой проект шаблон.

* Поскольку официальная документация показывает, как создавать маршруты, представления, шаблоны и ресурсы в Blueprint, не заботясь о том, какое приложение это "в"ЯМы предположили, что Blueprints, как правило, должны повторно использоваться в приложениях. Тем не менее, эта модульность некажетсятот полезно, не имея также независимых моделей.

Поскольку Blueprints можно подключить к приложению более одного раза, может быть, это просто неправильный подход к использованию моделей в Blueprints?

Ответы на вопрос(3)

Ваш ответ на вопрос