Django Rest-测试api删除
目前我正在测试我的django rest api,但我仍然坚持使用delete方法 我的url看起来像这样Django Rest-测试api删除,django,unit-testing,django-rest-framework,Django,Unit Testing,Django Rest Framework,目前我正在测试我的django rest api,但我仍然坚持使用delete方法 我的url看起来像这样 path('books/shelfs/<int:shelf>/readers/<int:pk>/', views.ReaderViewSet.as_view( {'get': 'retrieve', 'delete': 'destroy', 'patch': 'partial_update'}), def destroy(self,
path('books/shelfs/<int:shelf>/readers/<int:pk>/',
views.ReaderViewSet.as_view(
{'get': 'retrieve', 'delete': 'destroy', 'patch': 'partial_update'}),
def destroy(self, request, pk=None, *args, **kwargs):
if request.data.get("book_type") is None:
raise ParseError(detail="book_type is required, options are : 'global, non-global'")
try:
instance = self.get_object()
user = self.request.user
serializer = self.get_serializer(self.get_object())
.......
self.perform_destroy(instance)
except Http404:
pass
return Response(status=status.HTTP_204_NO_CONTENT)
我的测试用例是这样的
def test_book_delete(self):
# check if delete works
book_type = {'book_type': 'global'}
response = self.client.delete("/api/v1/books/shelfs/{}/"
"readers/{}/".format(
1, 2), data=book_type)
self.assertEqual(response.status_code, 204)
但它总是错误的
问题是,如何在delete中传递这个book\u type
?HTTP意味着服务器拒绝接受JSON负载
:
如果需要显式编码请求主体,可以通过设置content_type标志来实现
因此,请尝试按如下方式设置内容类型
:
response=self.client.delete(“/api/v1/books/shelfs/{}/”
“readers/{}/”。格式(
1,2),data=book\u type,content\u type=“application/json”)
ok-因此在/api/v1/books/shelfs/1/readers/2/
中没有可删除的资源,它实际上是存在的。它工作得很好,但我需要在请求中添加自定义数据以进行一些检查,这就是为什么我需要在请求正文中添加一些数据,而不需要那些额外的要求,它就可以工作,所以Django Rest可能不是为在delete方法中添加正文而设计的,我不确定是否需要在中阅读docsam-如果可以,将有所帮助,因此我已经知道错误的确切来源。谢谢您的帮助