python - 如何在 django rest api 测试中的 GET 请求中发送数据
问题描述
DB中有“顾问”和“价格”表,“价格”有一个“顾问”的外键。我想获取与特定顾问相关的所有价格记录。但是当我APITestCase
用来发送 GET 请求时出现错误。
视图.py:
class PriceAPI(APIView):
serializer_class = PriceSerializer
def get(self, request):
consultant_type = request.data.get('type', None)
try:
consultant = Consultant.objects.get(user=request.user, type=consultant_type)
except Consultant.DoesNotExist:
return Response(status=status.HTTP_406_NOT_ACCEPTABLE)
try:
serializer = self.serializer_class(consultant.prices, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
except:
return Response(status=status.HTTP_400_BAD_REQUEST)
测试.py:
class PriceTest(APITestCase):
def setUp(self):
###
def test_get_delete_price(self):
response = self.client.get(
reverse('price'),
data=json.dumps(
{'type': 'sports'}),
content_type='application/json'
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
我收到此错误:
Error
Traceback (most recent call last):
File "D:\programming\Pycharm\Projects\Django Projects\CAPP\capp_api\tests.py", line 394, in test_get_delete_price
content_type='application/json'
File "D:\programming\Pycharm\Projects\Django Projects\CAPP\venv\lib\site-packages\rest_framework\test.py", line 286, in get
response = super().get(path, data=data, **extra)
File "D:\programming\Pycharm\Projects\Django Projects\CAPP\venv\lib\site-packages\rest_framework\test.py", line 194, in get
'QUERY_STRING': urlencode(data or {}, doseq=True),
File "D:\programming\Pycharm\Projects\Django Projects\CAPP\venv\lib\site-packages\django\utils\http.py", line 113, in urlencode
for key, value in query:
ValueError: not enough values to unpack (expected 2, got 1)
此错误与请求中发送的数据有关。我怎样才能在 GET 请求中做到这一点?
解决方案
GET 请求无法传递 JSON 正文。参数可以通过查询字符串传递。因此,在 test.py 中,数据必须更改,并且在 views.py 中的“get”函数中,request.GET.get('field')
我们可以访问该参数。
测试.py:
response = self.client.get(
reverse('price'),
data={'type': 'sports'}, # This line is changed
content_type='application/json'
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
视图.py:
consultant_type = request.GET.get('type', None)
推荐阅读
- c# - 型号项目 DateTime plus 2 Year
- python - 模拟导入以测试类方法
- docker - containerd.io vs docker-ce-cli vs docker-ce:有什么区别,每个包的作用是什么?
- python - 如何从不同的函数访问数组、列表或字典
- python - 在没有数组帮助的情况下,如何检查 3/5 值是否相同?
- c++ - 使用 C++ 11 读取 3 列 csv 文件
- html - 如何循环插入数据库中的数据以使用 django 选择表单
- c - linux内核中错误注入宏的目的
- jenkins-pipeline - 通过 Jenkins 作业将工作节点添加到集群
- python - 基类中派生类的引用类型