'Django REST Framework ApiView not allowing DELETE
I am new to Django and I am having a issue sending a DELETE request to a class based view which inherits from APIView.
Here is my class:
class PageDetail(APIView):
    def get(self, request, pk):
        page = get_object_or_404(Page, pk=pk)
        data = PageSerializer(page).data
        return Response(data)
    def put(self, request, pk):
            stream = io.BytesIO(request.body)
            response = JSONParser().parse(stream)
            page = Page.objects.get(pk=pk)
            page.title = response.get('title', page.title)
            page.content = response.get('content', page.content)
            user = User.objects.get(pk=response.get('author', page.author))
            page.author = user
            page.save()
            return HttpResponseRedirect(reverse('pages_detail', args=(page.id,)))
    def delete(self, request, pk):
            page = Page.objects.get(pk=pk)
            page.delete()
            return HttpResponseRedirect(reverse('pages_list'))
When I make the DELETE request, the resource is deleted, but the page responds with the message:
{'detail':'Method 'DELETE' not allowed.'}
Although in the header I have:
Allow: GET, PUT, DELETE, HEAD, OPTIONS
Anyone have any ideas?
Solution 1:[1]
Using APIView you need to specify the http_method_names attribute explicitly.
Example:
class PageDetail(APIView):
    """
        page detail api view.
    """
    permission_classes = (
        permissions.IsAuthenticated,
    )
    http_method_names = [
        'delete',
        'head',
        'options',
    ]
    def delete(self, request, pk, *args, **kwargs):
        return Response(status=200)
        
    					Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source | 
|---|---|
| Solution 1 | Qasim Khokhar | 
