Request.data或Request.query_params访问POST中的参数?

时间:2019-03-14 08:21:27

标签: python django django-rest-framework

我正在构建一个简单的API,并试图测试POST请求。发布请求应仅基于以下一个参数创建新记录:标题。

我正在使用manage.py test进行测试,并且已经设置了客户端:

client = rest_framework.test.APIClient()

问题:当我手动提供URL时,它工作正常(“快照”是电影的标题)。

response = client.post('/movies/?title=snatch', format='json')

在这种情况下,我可以在视图中访问标题request.query_params.get('title')和request.data.get('title')。

但是当我尝试在数据参数中传递标题时:

response = client.post('/movies/', data={'title':'snatch'}, format='json')

这应该访问“ / movies /?title = snatch”,但只能访问“ / movies /”。 我可以通过request.data.get('title')访问标题,但不能通过request.query_params.get('title')访问。

我应该如何访问POST请求中发送的参数?通过request.data访问是否正确? 有人可以给我更好的解释差异和用例吗?

1 个答案:

答案 0 :(得分:2)

request.data 保存在请求正文中发送的数据,即在此处使用 data 参数:

response = client.post('/movies/', data={'title':'snatch'}, format='json')

request.query_params 保留以查询字符串参数发送的数据,即此处的标题:

response = client.post('/movies/?title=snatch', format='json')

要执行,请发送这样的请求

response = client.post('/movies/?director=guyritchie', data={'title':'snatch'}, format='json')

您可以通过 request.query_params 获得 director 参数,并通过 request.data 获得 title 参数 >

有关数据和query_params之间差异的更多信息: HTTP POST with URL query parameters -- good idea or not?

相关问题