DRF APIClient 删除数据到达 request.data,而不是 request.query_params
DRF APIClient Delete data arrives in request.data, not request.query_params
我使用 DRF 的 APIClient 编写自动化测试。而且在写第一个delete测试的时候,我发现很奇怪,传过来的数据是request.data,而我用Axios或者Postman,总是request.query_params。
关于为什么会这样的任何解释,最好是在数据到达 query_params 时使用 APIClient.Delete 的方法会很棒!
我的测试:
import pytest
from rest_framework.test import APIClient
@pytest.fixture()
def client():
client = APIClient()
client.force_authenticate()
yield client
class TestDelete:
def test_delete(client):
response = client.delete('/comment', data={'team': 0, 'id': 54})
还有我的看法
from rest_framework.views import APIView
class Comments(APIView):
def delete(self, request):
print(request.query_params, request.data)
>>> <QueryDict: {}> <QueryDict: {'team': ['0'], 'id': ['54']}>
调查了 DRF 的 APIClient。喂养参数似乎没有帮助。 delete 方法似乎也没有可以提供帮助的直接参数。所以我有点卡住了。
虽然提出了一些不错的选项,但它们不适用于 DRF 的 APIView。我最终使用 urllib
并手动编码:
import pytest
from urllib.parse import urlencode
from rest_framework.test import APIClient
@pytest.fixture()
def client():
client = APIClient()
client.force_authenticate()
yield client
class TestDelete:
def test_delete(client):
response = client.delete(f'/comment{urlencode(data)}')
我使用 DRF 的 APIClient 编写自动化测试。而且在写第一个delete测试的时候,我发现很奇怪,传过来的数据是request.data,而我用Axios或者Postman,总是request.query_params。 关于为什么会这样的任何解释,最好是在数据到达 query_params 时使用 APIClient.Delete 的方法会很棒!
我的测试:
import pytest
from rest_framework.test import APIClient
@pytest.fixture()
def client():
client = APIClient()
client.force_authenticate()
yield client
class TestDelete:
def test_delete(client):
response = client.delete('/comment', data={'team': 0, 'id': 54})
还有我的看法
from rest_framework.views import APIView
class Comments(APIView):
def delete(self, request):
print(request.query_params, request.data)
>>> <QueryDict: {}> <QueryDict: {'team': ['0'], 'id': ['54']}>
调查了 DRF 的 APIClient。喂养参数似乎没有帮助。 delete 方法似乎也没有可以提供帮助的直接参数。所以我有点卡住了。
虽然提出了一些不错的选项,但它们不适用于 DRF 的 APIView。我最终使用 urllib
并手动编码:
import pytest
from urllib.parse import urlencode
from rest_framework.test import APIClient
@pytest.fixture()
def client():
client = APIClient()
client.force_authenticate()
yield client
class TestDelete:
def test_delete(client):
response = client.delete(f'/comment{urlencode(data)}')