如何在烧瓶控制器中正确使用 importlib?
How to use correctly importlib in a flask controller?
我正在尝试根据某些设置加载模块。我找到了一个可行的解决方案,但我需要高级 python 开发人员的确认,该解决方案是性能最佳的解决方案,因为将使用它的 API 端点将承受重负载。
想法是根据用户和其他系统配置的参数更改端点的工作。我正在根据这些设置加载正确的处理程序 class。目标是能够轻松创建新的处理程序,而无需修改调用处理程序的代码。
这是一个工作示例:
./run.py :
from flask import Flask, abort
import importlib
import handlers
app = Flask(__name__)
@app.route('/')
def api_endpoint():
try:
endpoint = "simple" # Custom logic to choose the right handler
handlerClass = getattr(importlib.import_module('.'+str(endpoint), 'handlers'), 'Handler')
handler = handlerClass()
except Exception as e:
print(e)
abort(404)
print(handlerClass, handler, handler.value, handler.name())
# Handler processing. Not yet implemented
return "Hello World"
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8080, debug=True)
一个 "simple" 处理程序示例。处理程序是一个需要定义处理程序的模块 class :
./handlers/simple.py :
import os
class Handler:
def __init__(self):
self.value = os.urandom(5)
def name(self):
return "simple"
如果我理解正确,导入是在对端点的每个查询上完成的。这意味着文件系统中的 IO 查找模块,...
这是实施该策略的正确/"pythonic"方法吗?
问题已移至代码审查。感谢大家的帮助:https://codereview.stackexchange.com/questions/96533/extension-pattern-in-a-flask-controller-using-importlib
我正在关闭此线程。
我正在尝试根据某些设置加载模块。我找到了一个可行的解决方案,但我需要高级 python 开发人员的确认,该解决方案是性能最佳的解决方案,因为将使用它的 API 端点将承受重负载。
想法是根据用户和其他系统配置的参数更改端点的工作。我正在根据这些设置加载正确的处理程序 class。目标是能够轻松创建新的处理程序,而无需修改调用处理程序的代码。
这是一个工作示例:
./run.py :
from flask import Flask, abort
import importlib
import handlers
app = Flask(__name__)
@app.route('/')
def api_endpoint():
try:
endpoint = "simple" # Custom logic to choose the right handler
handlerClass = getattr(importlib.import_module('.'+str(endpoint), 'handlers'), 'Handler')
handler = handlerClass()
except Exception as e:
print(e)
abort(404)
print(handlerClass, handler, handler.value, handler.name())
# Handler processing. Not yet implemented
return "Hello World"
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8080, debug=True)
一个 "simple" 处理程序示例。处理程序是一个需要定义处理程序的模块 class :
./handlers/simple.py :
import os
class Handler:
def __init__(self):
self.value = os.urandom(5)
def name(self):
return "simple"
如果我理解正确,导入是在对端点的每个查询上完成的。这意味着文件系统中的 IO 查找模块,...
这是实施该策略的正确/"pythonic"方法吗?
问题已移至代码审查。感谢大家的帮助:https://codereview.stackexchange.com/questions/96533/extension-pattern-in-a-flask-controller-using-importlib
我正在关闭此线程。