我想构造我的烧瓶应用程序,比如:
./site.py
./apps/members/__init__.py
./apps/members/models.py
apps.members
是一个烧瓶蓝图。
现在,为了创建模型类,我需要掌握应用程序,比如:
# 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
。我怎样才能在这里正确地使用我的应用程序?相对进口可能有用,但它们相当难看,并且有自己的背景问题,例如:
from ...site import app
# ValueError: Attempted relative import beyond toplevel package
一个原始的app.py:https://flask-sqlalchemy.palletsprojects.com/en/2.x/quickstart/
我只是将一个app.py拆分为app.py和model.py,而没有使用Blueprint。在那种情况下,上面的答案不起作用。需要行代码才能工作。
之前:
之后:
下面的链接非常有用。
http://piotr.banaszkiewicz.org/blog/2012/06/29/flask-sqlalchemy-init_app/
无需立即使用应用程序初始化
flask_sqlalchemy
模块-您可以改为:然后在应用程序设置中,可以调用
init_app
:这样你就可以避免周期性的进口。
这种模式不需要将所有模型放在一个文件中。只需将
db
变量导入到每个模型模块中。示例
注意:这是这给你带来的一些力量的草图,显然你可以做更多的事情来让开发变得更容易(使用
create_app
模式,在某些文件夹中自动注册蓝图等)相关问题 更多 >
编程相关推荐