我正在关注掌握烧瓶推荐的文件结构。
(我的项目名称是Paw)
在Paw/paw/__init__.py
:
def create_app(object_name):
app = Flask(__name__)
app.config.from_object(object_name)
db.init_app(app)
robot = LoggingWeRobot(token='banana', enable_session=True)
robot.init_app(app, endpoint='werobot', rule='/wechat')
attach_debugging_logger(app)
app.register_blueprint(poll_blueprint)
app.register_blueprint(wechat_blueprint)
return app
请注意,我的蓝图中实际需要机器人变量,wechat,见于:Paw / paw / controllers / wechat.py
@robot.handler
def request_logging_middleware(message, session):
app.logger.debug("\n%s", request.data)
return False # This allows other handlers to continue execution
所以我的问题是我的蓝图无法访问robot
变量。但是,robot
变量应该在Paw/paw/__init__.py
中的create_app中创建,因为我正在尝试遵循应用程序工厂模式。
有关如何解决此问题的任何建议?我的项目可以找到here,我正在尝试关注this application structure
答案 0 :(得分:1)
只需使用您用于db
的相同模式 - 在其他地方创建robot
并将其导入Paw/paw/__init__.py
文件,就像使用db
一样:
import db from models
import robot from wechat_setup
# wechat_setup is where you would invoke
# robot = LoggingWeRobot(token='banana', enable_session=True)
def create_app(object_name):
app = Flask(__name__)
app.config.from_object(object_name)
db.init_app(app)
robot.init_app(app, endpoint='werobot', rule='/wechat')
答案 1 :(得分:0)
我通常将项目全局变量放在一个文件中(比如gvars.py
)。
然后项目结构将是这样的:
.
├── etc
│ └── webapp.py
├── models
│ └── common.py
├── views
│ └── common.py
├── gvars.py
└── webapp.py
在其他文件中我们只是这样做:
from gvars import db, robot # or other variables