首先,免责声明:我不熟悉蟒蛇或烧瓶,所以请耐心等待。
我正在尝试使用flask组合一个最小的API,我计划从子目录的内容动态生成路由及其相关的proc。 代码看起来像这样:
from flask import Flask
import os
app = Flask(__name__)
configs = os.getcwd() + "/configs"
for i in os.listdir(configs):
if i.endswith(".json"):
call = "/" + os.path.splitext(i)[0]
@app.route(call, methods=['POST'])
def call():
return jsonify({"status": call + "Success"}), 200
计划是迭代一堆配置文件并使用他们的naes来定义路由。现在,这适用于单个配置文件,但不适用于多个文件,因为我最终试图覆盖每个路由使用的函数call
。
只要我可以传入呼叫名称,我就可以将大部分代码分解为单独的函数。然而,似乎无论如何,我需要动态命名生成的函数并映射到路径。
所以,我的问题是:如何使用变量的内容,如'call'作为函数名?
即。
之类的东西call = "getinfo"
def call(): # Effectively being evaled as def getinfo():
我尝试过的所有功能都没有用,而且我对python语法的信心不足以知道是不是因为我只是在做些傻事。
另外还有另一种方法可以实现我想要实现的目标吗?
感谢所有人和任何反馈!
答案 0 :(得分:1)
感谢您的帮助。我已经移动到一个路由和一个处理程序并构建文件列表,并分别处理请求路径等。 这是我现在拥有的模型的消毒版本:
from flask import Flask
import os
calls = []
cfgs = {}
app = Flask(__name__)
configs = os.getcwd() + "/configs"
for i in os.listdir(configs):
if i.endswith(".json"):
cfgs[call] = os.path.splitext(i)[0]
calls.extend([call])
@app.route('/<call>', methods=['POST'])
def do(call):
if call not in calls:
abort(400, "invalid call")
# Do stuff
return jsonify({"status": call + "Success"}), 200
if __name__ == '__main__':
app.run(debug=True)
所以,多亏了上面的评论,这就是我正在做的事情。仍然很想知道是否有任何方法可以在函数名中使用变量?