首页 > 解决方案 > 如何通过 Flask 请求文件属性获取 Python 字典

问题描述

随着server.py运行:

from flask import Flask, request, Response

app = Flask(__name__)

@app.route('/test', methods=['GET','POST'])
def route():   
    print('got files: %s' % request.files)
    return Response()

if __name__ == '__main__':
    app.run('0.0.0.0', 5000)

使用发送请求client.py

import json, requests  

dictionary_1 = {"file": {"url": "https://bootstrap.pypa.io/get-pip.py"}}  

files = [('dictionary_1', ('get-pip.py', json.dumps(dictionary_1), 'application/json'))]

response = requests.post('http://127.0.0.1:5000/test', files=files)

服务器记录它收到请求:

got files: ImmutableMultiDict([('dictionary_1', <FileStorage: u'get-pip.py' ('application/json')>)]) 

显然,dictionary_1被作为FileStorage对象接收。如何将接收FileStorage到的变成 Python 字典?

稍后编辑

可能的重复帖子没有说明如何发送和解包通过发送的 Python 字典对象requests(files=list())

标签: pythonflaskrequestpython-requests

解决方案


发生这种情况是因为您发布的是文件而不是数据。这应该有效:

import flask

app = flask.Flask(__name__)

@app.route('/test', methods=['GET','POST'])
def route():   
    print('got data: {}'.format(flask.request.json))
    return Response()

if __name__ == '__main__':
    app.run('0.0.0.0', 5000)

然后将数据发送到您的应用程序

import requests  

dictionary_1 = {"file": {"url": "https://bootstrap.pypa.io/get-pip.py"}}  

response = requests.post('http://127.0.0.1:5000/test', json=dictionary_1)

在您的示例中,除非我误解了某些内容,否则无需发布文件


推荐阅读