Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在POST请求中将列表强制转换为字符串是有效的,但将其保留为列表并不';T_Python_Django - Fatal编程技术网

Python 在POST请求中将列表强制转换为字符串是有效的,但将其保留为列表并不';T

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

我正试图弄明白为什么这是一个有效的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)

我不确定为什么将“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),
)才能检测为字符串。