python - 从导入的模块运行 Flask
问题描述
我正在尝试从导入的模块运行 Flask(使用装饰器创建包装器)。
基本上我有:
应用程序.py:
import mywrapper
@mywrapper.entrypoint
def test():
print("HEYO!")
我的包装器.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 f
FLASK_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.
让 Flask 像这样运行有什么技巧吗?还是只是不可能?这样做的目的是在这种情况下将 Flask 抽象出来。
在我的头烧瓶中应该尝试导入mywrapper.py
,哪些导入app.py
应该生成应用程序和路由,但这似乎不是发生的事情。
任何帮助,将不胜感激。
解决方案
所以我从那以后了解到 Flask 只在所选模块的命名空间中搜索包含 Flask 对象的变量。
可能有一种聪明的方法可以避免这种限制,但我决定将 Flask 类本身包装起来更明智。如果人们想要直接的 Flask 功能,我真的不在乎这种情况,所以我唯一真正的限制是某些函数名称是不受限制的。
基本上:
包装器.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"
这仍然足够抽象,我对结果感到满意。
推荐阅读
- javascript - 单击时如何将 div 对齐到从底部浮动/悬停?
- php - 如何在 Laravel 中按单列分组
- elasticsearch - Elasticsearch - 查询字符串中的特殊字符
- node.js - 尝试 find.count 时如何避免“[object Object]1”
- oracle - 如何在两个日期之间的表上获取日期范围分区名称(给定日期范围)
- javascript - 如何在java中的mapReduce中调用mongodb服务器端函数
- docker - Linkerd 边车注入
- php - 更好的性能,JOIN 还是多个查询?
- git - Git:提交日期的批量更改
- javascript - 使用 Numeral JS 将任何数字转换为相同的比例