Python 在POST请求中将列表强制转换为字符串是有效的,但将其保留为列表并不';T
我正试图弄明白为什么这是一个有效的POST请求:Python 在POST请求中将列表强制转换为字符串是有效的,但将其保留为列表并不';T,python,django,Python,Django,我正试图弄明白为什么这是一个有效的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
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)
我不确定为什么将“id”列表转换为字符串会有效,但将其保留为列表则不行 两者都是有效的post请求 通过使用
json.loads(ids\u json)
您期望ids\u json
是一个字符串
json.load
将字符串解析为json都是有效的post请求
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.
通过使用json.loads(ids\u json)
您期望ids\u json
是一个字符串
json.load
将字符串解析为json这些是不同的json:
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.
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”。第二个是列表。这些是不同的JSON:
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”。第二个是列表。这就是
json.loads
的工作原理,它需要一个字符串。这就是json.loads
的工作原理,它需要一个字符串。啊!为什么函数能够将ID强制转换为字符串,但不抱怨纬度/经度是整数?因为您不强制纬度/经度是字符串,所以它们只是数字。您必须将它们转换为字符串(例如:'latitude':str(0),
)才能被检测为字符串。啊!为什么函数能够将ID强制转换为字符串,但不抱怨纬度/经度是整数?因为您不强制纬度/经度是字符串,所以它们只是数字。您必须将它们转换为字符串(例如:'latitude':str(0),
)才能检测为字符串。