使用Requests POST请求发送元数据和数据帧

时间:2019-05-06 12:16:58

标签: python flask python-requests

我正在使用pythons请求将Pandas Dataframe发送到Flask服务器。该数据框具有约200万行和16列。我想将配置字典与数据帧一起作为元数据发送。目前,我可以将数据帧作为JSON文件发送,但是,找不到在同一发布请求中附加元数据的任何方法。

这是我的代码:

客户端

 # Post request containing 1. The dataset (pandas df) 2. The metadata (dict)

 dataset = dataset.to_json(orient='split')
 metadata = {'dataset ID': "makis", 'date start': "1", 'date end': "2"}

 url = "http://localhost:8081/upload_dataset"
 r = requests.post(url, data=dataset)
 return r.text

服务器端:

@app.route("/upload_dataset", methods=['POST'])

def upload_dataset():
    from werkzeug.datastructures import FileStorage

    payload = request.stream
    dataset = pd.read_json(payload, typ='frame', orient='split')
    FileStorage(payload).save('dataset.csv')

    return 'File Uploaded & Standing by', 200

1 个答案:

答案 0 :(得分:0)

序列化为json后,您的数据集为纯文本。要从那里添加更多参数,您唯一的选择是将有效负载和元数据嵌入post parameters中,从而对json进行url编码。或将您的有效载荷嵌入顶级json post中,从而在json中进行双重编码。

如果您将json编码工作留给requests,那么您将获得清晰度甚至性能。这样,您可以添加数据,并且仍然只能进行一次编码/解码。

示例


dataset = dataset.to_dict(orient='list')
post_data = {'dataset ID': "makis", 'date start': "1", 'date end': "2", 'payload': dataset}
url = "http://localhost:8081/upload_dataset"
r = requests.post(url, json=post_data)

服务器端:

@app.route("/upload_dataset", methods=['POST'])
def upload_dataset():
    post_data = request.get_json()
    ## Use of meta data keys e.g. post_data['date start']
    dataset = pd.from_dict(post_data['payload'], orient='columns')