Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Rest-测试api删除_Django_Unit Testing_Django Rest Framework - Fatal编程技术网

Django Rest-测试api删除

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,

目前我正在测试我的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, 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-如果可以,将有所帮助,因此我已经知道错误的确切来源。谢谢您的帮助