我正在尝试从导入的模块运行Flask (使用装饰器创建包装器)。
基本上我有:
app.py:
import mywrapper
@mywrapper.entrypoint
def test():
print("HEYO!")mywrapper.py
from flask import Flask
ENTRYPOINT = None
app = Flask(__name__)
@app.route("/")
def listen():
"""Start the model API service"""
ENTRYPOINT()
def entrypoint(f):
global ENTRYPOINT
ENTRYPOINT = f
return fFLASK_APP=app
但是,运行python -m flask会导致:
flask.cli.NoAppException: Failed to find Flask application or factory in module "app". Use "FLASK_APP=app:name to specify one.
有什么办法让酒瓶像这样运行吗?还是根本不可能?这样做的目的是为了在这种情况下抽离瓶。
在我的头脑中,烧瓶应该尝试导入mywrapper.py,它导入app.py,它应该生成应用程序和路由,但这似乎不是发生的事情。
任何帮助都将不胜感激。
发布于 2019-06-04 11:14:22
因此,我了解到,Flask只在所选模块的命名空间中搜索包含Flask对象的变量。
也许有一种聪明的方法来避免这种限制,但我却认为更明智的做法是只包装Flask类本身。如果人们想要直接的烧瓶功能,在这种情况下我并不在乎,所以我唯一真正的限制是一些函数名是禁止使用的。
基本上:
wrapper.py:
class Wrapper(Flask):
def __init__(self, name):
super().__init__(name)
self.entrypoint_func = None
@self.route("/")
def listen():
return self.entrypoint_func()
def entrypoint(self, f):
assert self.entrypoint_func is None, "Entrypoint can only be set once"
self.entrypoint_func = f
return f和app.py:
from mywrapper import Wrapper
app = Wrapper(__name__)
@app.entrypoint
def test():
print("HEYO!")
return "SUCCESS"这仍然是抽象的,我对结果很满意。
https://stackoverflow.com/questions/56442282
复制相似问题