我正在试图弄清楚为什么这构成了有效的POST请求:
pk = 5
data = {
'ids': str([pk]),
'latitude': 0,
'longitude': 0,
}
response = self.client.post(
'/api/{}/endpoint'.format(settings.DEFAULT_VERSION),
data=json.dumps(data, indent=4),
content_type='application/json',
HTTP_AUTHENTICATION=user.access_token,
)
而这不是:
pk = 5
data = {
'ids': [pk],
'latitude': 0,
'longitude': 0,
}
response = self.client.post(
'/api/{}/endpoint'.format(settings.DEFAULT_VERSION),
data=json.dumps(data, indent=4),
content_type='application/json',
HTTP_AUTHENTICATION=user.access_token,
)
后者导致以下错误:“TypeError:期望的字符串或缓冲区”。
在服务器端,第二行似乎失败了:
ids_json = request.data.get('ids')
ids = json.loads(ids_json)
我不确定为什么将'ids'列表作为字符串生效,但将其保留为列表却不行。
答案 0 :(得分:2)
这些是不同的jsons:
pk = 5
data = {
'ids': str([pk]),
'latitude': 0,
'longitude': 0,
}
# json = {"latitude": 0, "longitude": 0, "ids": "[5]"}
虽然:
pk = 5
data = {
'ids': [pk],
'latitude': 0,
'longitude': 0,
}
# json = {"latitude": 0, "longitude": 0, "ids": [5]}
第一个实际上是一个字符串,所以你可以将它进一步传递给“json.loads”。第二个是列表。
答案 1 :(得分:1)
两者都是有效的邮寄请求。
使用json.loads(ids_json)
,您希望ids_json
成为字符串。
json.loads
将字符串解析为json
答案 2 :(得分:1)
pk = 5
data = {
'ids': [pk],
'latitude': 0,
'longitude': 0,
}
response = self.client.post(
'/api/{}/endpoint'.format(settings.DEFAULT_VERSION),
data=json.dumps(data, indent=4),
content_type='application/json',
HTTP_AUTHENTICATION=peep.access_token,
)
# on server side, it seem like the request.data is already a dict type.
ids_json = request.data.get('ids')
# so ids_json is should be a list type, which you want to get.