kar*_*aka 3 django get http python-3.x django-rest-framework
我想在 django drf 测试用例中使用 get 请求发送正文数据 APITestCase
例如
data ={'hi':'bye'}
self.client.get('media_list/', {'body': data})
Run Code Online (Sandbox Code Playgroud)
在视图中,我可以使用以下代码获取主体
request.data.get('hi', None)
Run Code Online (Sandbox Code Playgroud)
但它不能使用{'body': data}我的测试方法工作,但它在postman原始类型中工作正常。
尝试的是(不工作)
self.client.get('media_list/', data=data)
Run Code Online (Sandbox Code Playgroud)
小智 7
我在编写单元测试时遇到了这个问题。您可以使用此解决方法解决它。
问题:当您使用 client.get 方法请求时,该方法会将您的数据放入 url。你可以在下面看到链接。
https://github.com/encode/django-rest-framework/blob/master/rest_framework/test.py#L194
解决方法:你应该client.generic()直接使用。不要使用client.get() https://github.com/encode/django-rest-framework/blob/master/rest_framework/test.py#L203
例子
import json
from rest_framework.test import APIClient
from rest_framework.test import APITestCase
class TestClass(APITestCase):
def setUp(self):
# Setup run before every test method.
pass
def test_send_json_in_body(self):
data ={'hi' : 'bye'}
resp = self.client.generic(method="GET", path="/return/data/", data=json.dumps(data), content_type='application/json')
Run Code Online (Sandbox Code Playgroud)
request._request
<WSGIRequest: GET '/return/data/'>
request.data
{'hi': 'bye'}
Run Code Online (Sandbox Code Playgroud)
有用 :)
data` 返回请求正文,对于 get api,您需要获取查询参数尝试以下代码:
data = {'hi':'bye'}
self.client.get('media_list/', data)
request.query_params.get('hi', None)
Run Code Online (Sandbox Code Playgroud)