Python将参数传递给Flask函数

时间:2019-06-29 02:02:17

标签: python-3.x flask arguments

我正在编写一个Flask应用程序脚本,并且遇到了一个函数,该函数在独立脚本中接受了flask应用程序外部的参数和函数,但不接受我在Flask应用程序内部传递给它的'TFEVT_node_id'参数。这是Flask代码:

#################################################
# Flask Setup
#################################################
#app = Flask(__name__, static_url_path='')
app = Flask(__name__)
CORS(app)
#################################################
#global variables
TFEVT_node_id = ''
token = ''
#################################################
# CityIQ API calls
#################################################
def get_token():
    print("Get Token")
    url = 'https://auth.aa.cityiq.io/oauth/token'
    querystring = {"grant_type":"client_credentials"}

    response = requests.get(url, auth=HTTPBasicAuth(client,secret), params=querystring).json()
    token = response['access_token']
    print("Token Received")
    return token

#given a specific subasset this function returns the CityIQ traffic events for a given period of time in minutes
def get_traffic(TFEVT_node_id, lookback_minutes):
    url_string = '/events'
    url = "https://sandiego.cityiq.io/api/v2/event/assets/"+TFEVT_node_id+url_string
    ts = datetime.datetime.now().timestamp()
    CityIQ_Current_TS = int(ts*1000)
    CityIQ_TS_Calc_TS =  datetime.datetime.now() - timedelta(minutes=lookback_minutes)
    CityIQ_Starttime_TS =  int((ts-(lookback_minutes*60))*1000)
    querystring = {"eventType":"TFEVT","startTime":CityIQ_Starttime_TS,"endTime":CityIQ_Current_TS,"pageSize":"100"}
    payload = ""
    headers = {
            'Authorization': "Bearer {}".format(token),
            'Predix-Zone-Id': "SD-IE-TRAFFIC",
            'cache-control': "no-cache",
            }
    response = requests.request("GET", url, headers=headers, params=querystring).json()
    return(response)

#give it an CityIQ node ID and it will return the asset TFEVT child .
def get_asset_TFEVT(node_id):
    url = "https://sandiego.cityiq.io/api/v2/metadata/assets/"+node_id+"/subAssets"
    payload = ""
    headers = {
        'Authorization': "Bearer {}".format(token),
        'Predix-Zone-Id': "SD-IE-ENVIRONMENTAL",
        'cache-control': "no-cache",
        }
    response = requests.request("GET", url, data=payload, headers=headers).json()
    for i in response['assets']:
        if any('TFEVT' in i for i in [i][0]['eventTypes']):
            global TFEVT_node_id
            TFEVT_node_id = ([i][0]['assetUid'])
    return(TFEVT_node_id)

#test def that should be removed in production
def test(TFEVT_node_id, lookback_minutes):
    found_cars = get_traffic(TFEVT_node_id, lookback_minutes)
    print(found_cars)
    return(found_cars)

#################################################
# Flask Routes
#################################################
@app.route('/')
def hello_world():
    global token
    token = get_token()
    return 'documentation comming soon!'

@app.route('/test/<string:node_id>')
def go(node_id):
    global token
    token = get_token()
    global TFEVT_node_id
    TFEVT_node_id = get_asset_TFEVT(node_id)
    cars_list = []
    lookback_minutes = 15
    env_output = {}
    ccars = test(TFEVT_node_id, lookback_minutes)
    cars_list.append(ccars)
    env_output.update({'Cars' : cars_list})

if __name__ == '__main__':
    app.run()

同样,当这些功能在Flask应用程序外部运行时,我将获得期望的结果。在Flask应用程序内部(运行上面的代码)返回TypeError:view函数未返回有效响应。我已经追溯到gettraffic函数中的404响应,其中回溯分钟变量通过了,但TFEVT_node_id却没有。

我是Python的新手。

1 个答案:

答案 0 :(得分:0)

您的go()函数没有返回值。期望得到响应。请参阅:About responses