动态python / flask路由函数命名

时间:2015-10-31 22:32:03

标签: python flask

首先,免责声明:我不熟悉蟒蛇或烧瓶,所以请耐心等待。

我正在尝试使用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语法的信心不足以知道是不是因为我只是在做些傻事。

另外还有另一种方法可以实现我想要实现的目标吗?

感谢所有人和任何反馈!

1 个答案:

答案 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)

所以,多亏了上面的评论,这就是我正在做的事情。仍然很想知道是否有任何方法可以在函数名中使用变量?