在Python请求中将dictionary放入dictionary

2024-10-01 07:29:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用以下数据结构发送PUT请求:

{ body : { version: integer, file_id: string }}

以下是客户代码:

^{pr2}$

以下是服务器代码:

api.add_resource(resources.FirmwareNewVerUpload, '/firmwares')

class FirmwareNewVerUpload(rest.Resource):
    def put(self):
        try:
            args = parser.parse_args()
        except:
            print traceback.format_exc()

        print 'data: ', str(args['body']), ' type: ', type(args['body'])

        return

服务器打印:

data:  version  type:  <type 'unicode'>

这个结果不是我想要的。我得到了一个名为一个字典键的字符串,而不是内部字典。如果我把“版本”改为“版本”

    r = requests.put(url = url, data = {'body' : {'ver': id, 'file_id': str(file_uuid)}})

服务器打印

data:  ver  type:  <type 'unicode'>

如何发送带有内部词典的词典?在


Tags: 代码服务器iddata字典putversiontype
2条回答

在官方文件中你发现了一个叫做More complicated POST requests的主题

There are many times that you want to send data that is not form-encoded. If you pass in a string instead of a dict, that data will be posted directly.

>>> import json

>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}

>>> r = requests.post(url, data=json.dumps(payload))

也许将数据转换为JSON可能是一个好方法。在

^{pr2}$

在执行requests.putheaders = {'content-type':'application/json'}时,请使用json=,而不是{}:

 r = requests.put(url = url, 
                 json = {'body' : {'version': id, 'file_id': str(file_uuid)}}, 
                 headers = {'content-type':'application/json'})

相关问题 更多 >