相关疑难解决方法(0)

在Blueprint模型中使用Flask-SQLAlchemy而不参考应用程序

我正在尝试使用Blueprints在Flask中创建一个"模块化应用程序".

但是,在创建模型时,我遇到了必须引用应用程序以获取dbFlask-SQLAlchemy提供的对象的问题.我希望能够使用多个应用程序的蓝图(类似于Django应用程序的使用方式),所以这不是一个好的解决方案.*

  • 可以执行switcharoo,并让Blueprint创建db实例,然后应用程序将其与蓝图的其余部分一起导入.但是,任何其他希望创建模型的蓝图都需要从蓝图而不是应用程序导入.

我的问题是这样的:

  • 有没有办法让蓝图定义模型而不了解他们以后使用的应用程序 - 并且有几个蓝图汇集在一起​​?通过这个,我的意思是必须从你的蓝图导入应用程序模块/包.
  • 我从一开始就错了吗?蓝图是不是要独立于应用程序并且是可再发行的(Django应用程序)?
    • 如果没有,那么你应该使用什么模式来创建类似的东西?烧瓶扩展?你应该不这样做 - 并且可能将所有模型/模式集中在Ruby on Rails上?

编辑:我现在一直在考虑这个问题,这可能与SQLAlchemy有关,而不是Flask,因为你必须declarative_base()在声明模型的时候.和多数民众赞成得从什么地方来的,反正!

也许最好的解决方案是将项目的模式定义在一个地方并将其展开,就像Ruby on Rails一样.声明式SQLAlchemy类定义实际上更像是schema.rb而不是Django的models.py.我想这也可以更容易地使用迁移(来自alembicsqlalchemy-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)

python flask flask-sqlalchemy

65
推荐指数
2
解决办法
2万
查看次数

分为模块的Flask应用程序的文件夹布局是什么?

我正在试验来自Django的Flask,我非常喜欢它.我遇到了一个问题.我阅读了烧瓶文档和关于大型应用程序或类似内容的部分,它解释了一种在包中划分项目的方法,每个包都有自己的静态和模板文件夹以及自己的视图模块.问题是我无法找到一种方法,可以使用带有Flask扩展的SQLAlchemy将模型放在那里.它在交互式提示符下工作以创建表,但是当我在代码中使用它时它会中断.所以我想知道更有经验的Flask开发者如何解决这个问题.

python flask flask-sqlalchemy

17
推荐指数
2
解决办法
7201
查看次数

标签 统计

flask ×2

flask-sqlalchemy ×2

python ×2