简体   繁体   中英

Django Rest - testing api delete

Currrently I am testing my django rest api, but I am stuck on delete method.

My url looks like this

  path('books/shelfs/<int:shelf>/readers/<int:pk>/',
    views.ReaderViewSet.as_view(
        {'get': 'retrieve', 'delete': 'destroy', 'patch': 'partial_update'}),

And My ViewSets looks like this

  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)

 

And my test case is this

   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)

But its alway 415 error

The question is, how to pass this book_type in delete ?

HTTP 415 means that the server refused to accept the JSON payload.

Docs :

If you need to explicitly encode the request body, you can do so by setting the content_type flag.

So try to set the content_type as follows:

response = self.client.delete("/api/v1/books/shelfs/{}/"
                                  "readers/{}/".format(
                                      1, 2), data=book_type, content_type="application/json")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM