我正在尝试使用蓝图在Flask中创build一个“模块化应用程序”。 然而,在创build模型时,我遇到了必须引用应用程序以获取由Flask-SQLAlchemy提供的db -object的问题。 我想能够使用一个以上的应用程序的蓝图(类似于如何使用Django应用程序),所以这不是一个好的解决scheme。 有可能做一个switcharoo,并让蓝图创builddb实例,然后应用程序将其与蓝图的其余部分一起导入。 但是,任何其他希望创build模型的蓝图都需要从蓝图中导入,而不是从应用程序导入。 我的问题是这样的: 有没有办法让Blueprints定义模型,而没有意识到他们以后使用的应用程序 – 并且有几个蓝图组合在一起? 通过这个,我的意思是不得不从你的蓝图导入应用程序模块/包。 我从一开始就错了吗? 蓝图是不是意味着独立的应用程序和可重新分发(àDjango的应用程序)? 如果不是,那么你应该使用什么样的模式来创build类似的东西? 烧瓶扩展? 如果你不这样做 – 也许集中所有模型/模式在Ruby on Rails? 编辑 :我一直在思考这个问题,这可能与Flask更多地涉及SQLAlchemy,因为在声明模型时你必须有declarative_base() 。 无论如何,这都是从某个地方来的! 也许最好的解决scheme是将你的项目模式定义在一个地方,并像Ruby on Rails那样分布。 声明式的SQLAlchemy类定义实际上比schema.rb更像是Django的models.py。 我想这也可以使迁移更容易(从alembic或sqlalchemy迁移 )。 我被要求提供一个例子,所以让我们做一些简单的事情吧:假设我有一个蓝图来描述数据库中存储的简单的“静态”内容。 它使用一个只有短名称(对于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 […]
我正在使用Flask-SQLAlchemy从用户的数据库中查询; 然而, user = models.User.query.filter_by(username="ganye").first() 将返回 <User u'ganye'> 干 user = models.User.query.filter_by(username="GANYE").first() 回报 None 我想知道是否有一种方法来以不区分大小写的方式查询数据库,以便第二个示例仍然会返回 <User u'ganye'>
我想要构build我的Flask应用程序,如下所示: ./site.py ./apps/members/__init__.py ./apps/members/models.py apps.members是一个Flask蓝图。 现在,为了创build模型类,我需要拥有一个应用程序,如下所示: # apps.members.models from flask import current_app from flaskext.sqlalchemy import SQLAlchemy db = SQLAlchemy(current_app) class Member(db.Model): # fields here pass 但是,如果我尝试将该模型导入到我的Blueprint应用程序中,则会出现可怕的RuntimeError: working outside of request context 。 我怎样才能在这里正确地保持我的应用程序? 相对的import可能会起作用,但它们相当丑陋,并有其自身的上下文问题,例如: from …site import app # ValueError: Attempted relative import beyond toplevel package