gpt4 book ai didi

django - APIClient 的 PUT 调用中的查询参数

转载 作者:行者123 更新时间:2023-12-01 13:18:11 24 4
gpt4 key购买 nike

我有一个 API 端点,我想对其进行 PUT 调用,该调用需要正文和查询参数。我使用 Django 的测试客户端在测试用例 ( docs ) 中调用我的端点。

我在文档中读到,对于 GET 调用,查询参数是使用参数 data 引入的。 .我还阅读了 PUT 调用的参数 data代表 body 。我想念如何在 PUT 调用中添加查询参数的文档。

特别是,这个测试用例失败了:

data = ['image_1', 'image_2']
url = reverse('images')
response = self.client.put(url,
data=data,
content_type='application/json',
params={'width': 100, 'height': 200})

这个测试用例通过了:
data = ['image_1', 'image_2']
url = reverse('images') + '?width=100&height=200'
response = self.client.put(url,
data=data,
content_type='application/json')

换句话说:这种手动构建 URL 真的有必要吗?

最佳答案

假设您使用的是 rest_framework 的 APITestClient , 我找到了这个:

def get(self, path, data=None, secure=False, **extra):
"""Construct a GET request."""
data = {} if data is None else data
r = {
'QUERY_STRING': urlencode(data, doseq=True),
}
r.update(extra)
return self.generic('GET', path, secure=secure, **r)

而 put 是:
def put(self, path, data='', content_type='application/octet-stream',
secure=False, **extra):
"""Construct a PUT request."""
return self.generic('PUT', path, data, content_type,
secure=secure, **extra)

和有趣的部分(摘自 self.generic 代码):
    # If QUERY_STRING is absent or empty, we want to extract it from the URL.
if not r.get('QUERY_STRING'):
# WSGI requires latin-1 encoded strings. See get_path_info().
query_string = force_bytes(parsed[4]).decode('iso-8859-1')
r['QUERY_STRING'] = query_string
return self.request(**r)

所以你可以尝试用 QUERY_STRING 创建那个 dict并将其传递给 put 's kwargs,我不确定那是多么值得努力。

关于django - APIClient 的 PUT 调用中的查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52608821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com