代码之家  ›  专栏  ›  技术社区  ›  Kevin Müller

从Flask中的url获取变量以在函数外部使用

  •  -1
  • Kevin Müller  · 技术社区  · 7 年前

    我是个编程初学者,希望能在这里得到一些帮助。

    我的问题是: 我有这个密码:

    import os, json, subprocess, sys
    import CallExternalServiceConfig as c
    from flask import Flask, jsonify
    
    DATAS = "datas"
    SOURCE_FOLDER = "source_folder"
    NAME_SCRIPT = "name_script"
    PARAMETERS = "parameters"
    
    with open("CallScript.json", "r") as read_file:
    data = json.load(read_file)
    
    for trigger in data[DATAS]:
    adress=trigger[SOURCE_FOLDER]
    namescript=trigger[NAME_SCRIPT]
    parameter=trigger[PARAMETERS]
    
    app= Flask(__name__)
    
    @app.route('/Test/<string:jsonname>/')
    
    def action():
        #try:
        subprocess.call([adress+namescript, parameter.split(",")], shell=True)
        print(parameter.split(","))
        return jsonify(adress+namescript)
    if __name__ == "__main__":
        app.run(host=c.get(c.SERVER_HOST, '127.0.0.1'), port=int(c.get(c.SERVER_PORT, 
        '5000')));
    

    我想把 jsonname 字符串,并使用它替换 "CallScript.json" 所以它是动态的。但我不知道如何访问 def action() 功能。

    我在用烧瓶

    2 回复  |  直到 7 年前
        1
  •  0
  •   Srikanth Chekuri    7 年前
    import os, json, subprocess, sys
    import CallExternalServiceConfig as c
    from flask import Flask, jsonify
    
    DATAS = "datas"
    SOURCE_FOLDER = "source_folder"
    NAME_SCRIPT = "name_script"
    PARAMETERS = "parameters"
    
    
    app= Flask(__name__)
    
    @app.route('/Test/<string:jsonname>/')
    
    def action():
        json_name = request.args.get('jsonname', default = '', type = str)
        with open(json_name + ".json", "r") as read_file:
            data = json.load(read_file)
        for trigger in data[DATAS]:
            adress=trigger[SOURCE_FOLDER]
            namescript=trigger[NAME_SCRIPT]
            parameter=trigger[PARAMETERS]
    
        subprocess.call([adress+namescript, parameter.split(",")], shell=True)
        print(parameter.split(","))
        return jsonify(adress+namescript)
    if __name__ == "__main__":
        app.run(host=c.get(c.SERVER_HOST, '127.0.0.1'), port=int(c.get(c.SERVER_PORT, 
        '5000')));
    
        2
  •  0
  •   Windmill    7 年前

    首先,我们初始化您希望能够在函数外部访问的变量。然后,在调用URL时,我们将json文件名传递给一个函数,该函数将这些参数重置为该json文件中的值。

    adress = ""
    namescript = ""
    parameter = ""
    
    def read_json(filename):
        with open(filename, "r") as read_file:
            data = json.load(read_file)
        for trigger in data[DATAS]:
            adress=trigger[SOURCE_FOLDER]
            namescript=trigger[NAME_SCRIPT]
            parameter=trigger[PARAMETERS]
    
    @app.route('/Test/<string:jsonname>/')
    def action():
        json_name = request.args.get('jsonname', default = '', type = str) + ".json"
        read_json(json_name)
    

    当你的路线被调用时, json_name 现在将被设置为URL中的任何参数。

    推荐文章