我正在尝试使用Blueprints在Flask中创建一个"模块化应用程序".
但是,在创建模型时,我遇到了必须引用应用程序以获取dbFlask-SQLAlchemy提供的对象的问题.我希望能够使用多个应用程序的蓝图(类似于Django应用程序的使用方式),所以这不是一个好的解决方案.*
db实例,然后应用程序将其与蓝图的其余部分一起导入.但是,任何其他希望创建模型的蓝图都需要从该蓝图而不是应用程序导入.我的问题是这样的:
编辑:我现在一直在考虑这个问题,这可能与SQLAlchemy有关,而不是Flask,因为你必须
declarative_base()在声明模型的时候.和多数民众赞成得从什么地方来的,反正!也许最好的解决方案是将项目的模式定义在一个地方并将其展开,就像Ruby on Rails一样.声明式SQLAlchemy类定义实际上更像是schema.rb而不是Django的models.py.我想这也可以更容易地使用迁移(来自alembic或sqlalchemy-migrate).
我被要求提供一个例子,所以让我们做一些简单的事情:说我有一个描述"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('/<page>')
def show(page):
page_object = Page.query.filter_by(name=page).first()
return render_template('pages/{}.html'.format(page), page=page_object)
Run Code Online (Sandbox Code Playgroud)
然后,让这个蓝图定义自己的模型(这个simple_page/models.py)会很好:
# TODO Somehow get ahold of a `db` instance without referencing the app
# I …Run Code Online (Sandbox Code Playgroud) 我正在试验来自Django的Flask,我非常喜欢它.我遇到了一个问题.我阅读了烧瓶文档和关于大型应用程序或类似内容的部分,它解释了一种在包中划分项目的方法,每个包都有自己的静态和模板文件夹以及自己的视图模块.问题是我无法找到一种方法,可以使用带有Flask扩展的SQLAlchemy将模型放在那里.它在交互式提示符下工作以创建表,但是当我在代码中使用它时它会中断.所以我想知道更有经验的Flask开发者如何解决这个问题.