请求对象没有属性'body - Flask
我现在有三个不同的结果,它们都是以json格式呈现的,我想把这些结果通过API展示出来。我在用Flask来处理这个POST请求。这一切都应该通过负载(payloads)来完成。所以,这三个json对应着三个不同的URL。之前我使用的是硬编码的路径来获取结果。现在的新要求是,我需要动态地获取所有需要的数据路径,并展示结果。
下面的代码是我用来展示POST请求的,还有一个main_func()函数是我用来获取数据的。每次我运行这段代码时,都会出现一个错误 - “Request对象没有属性'body'”。我在这里有点困惑,想要动态获取结果。
@app.route('/result_spec', methods=['POST'])
def get_result_spec():
try:
payload = get_params_api(request)
result_spec, _, _ = main_func(request = payload)
return jsonify({"result_spec": result_spec})
except Exception as e:
return jsonify({"error": str(e)}), 500
def get_params_api(request):
# if request and hasattr(request, 'body'):
if request is not None:
json_body = json.loads(request.body)
# if json_body is not None:
ads_path = json_body["csv_path"]
json_path = json_body["spec_path"]
input_path = json_body["input_path"]
variable = json_body["variable"]
files_ = json_body["files_"]
variable_name1 = json_body["variable_name1"]
t_and_v = json_body["t_and_v"]
else:
csv_path = r"file.csv"
input_path = r"split_folder"
json_path = r"sample_transformation.json"
variable, files_, variable_name1, t_and_v = get_params()
payload = {
"csv_path": csv_path,
"json_path": json_path,
"input_path": input_path,
"dependent_variable": dependent_variable,
"files_geo": files_geo,
"variable_name": variable_name,
"trans_and_values": trans_and_values
}
return payload
def main_func(params):
csv_path = params["csv_path"]
json_path = params["json_path"]
input_path = params["input_path"]
variable = params["variable"]
files_ = params["files_"]
variable_name1 = params["variable_name1"]
t_and_v = params["t_and_v"]
# store_path_list = get_s3_directory_tree(input_path)
spath_list = get_s3_directory_tree(input_path)
df_data = get_S3_csv_data(spath_list[0])
header_ = get_header_names(df_data)
sp = read_json(json_path, header_)
result_spec = None
result_json = None
if user_specific_geo:
# result_spec, result_json, result_json_const = main_pipeline_user_specific_copy(spec, files, input_path, files_geo, dependent_variable, variable_name, trans_and_values)
result_spec, result_json, result_json_const = main_pipeline_user_specific(spec,store_path_list, files_geo, dependent_variable, variable_name, trans_and_values)
else:
result_spec, result_json, result_json_const = main_pipeline(spec, dependent_variable,store_path_list)
# payload_data = {"result_spec" : result_spec, "result_json" : result_json,
# "result_json_const" : result_json_const}
return result_spec, result_json , result_json_const
if __name__ == "__main__":
payload = get_params_api(request=None)
result_spec,result_json_const, result_json = main_func(params=payload)
2 个回答
0
要获取通过POST请求传递的数据,你可以使用下面的任意一种方法。
request.json.get('csv_path')
或者
request.get_json('csv_path') # as Detlef replied
请求对象是没有主体内容的。
对于GET请求,你可以使用 request.args.get('csv_path') 来获取数据。
另外,你可以通过去掉 get_params_api() 这个函数来优化代码,直接在 main_func() 中获取必要的参数,就像上面的例子那样。
0
请求对象其实没有一个叫做 body 的属性。如果你想要请求以 json 格式的数据,但又不想使用 json 这个包的话,可以使用请求对象的 get_json()
函数。
json_body = request.get_json()