95165


## 問題点

urls.pyで、ソースコードのように、urlpatternsを定義しました。  
BookViewerは、APIViewを継承してget,post,deleteメソッドを記述しました。  
postmanなどで、APIコマンドで、GET,POST,DELETEを発行しましたが、DELETEコマンドに対して、getメソッドが呼び出されてしまいます。  
何か記述に問題があるのでしょうか？

## 環境

OS:Ubuntu 22.04.1

## ソースコード

views.py

[code]

    from django.http import JsonResponse, HttpResponse
    
    from rest_framework import status
    from rest_framework.views import APIView
    
    class BookViewer(APIView):
      self get(self, request, *args, **kwargs):
        return JsonResponse({'status':'get'})
    
      self post(self, request, *args, **kwargs):
        return JsonResponse({'status':'post'})
    
      self delete(self, request, *args, **kwargs):
        return HttpResponse(status=status.HTTP_204_NO_CONTENT)
    
    
[/code]

urls.py

[code]

    from django.urls import path
    
    from .view import BookViewer
    urlpatterns = [
        path('book/<pk>/<option>/',BookViewer.as_view()),
    ]
    
    
[/code]


CC BY-SA 4.0
2023-06-08T05:50:48.480
95143
2023-06-09T14:13:17.917
32891
question
python django-rest-framework
APIView Deleteコマンドで、getメソッドが呼び出されてしまう。


メソッド定義が self で始まっているのが間違いです。 APIView サブクラスでメソッドを定義する場合は、self ではなく def
を使用する必要があります。

このコードを試してください:

[code]

    from django.http import JsonResponse, HttpResponse
    from rest_framework import status
    from rest_framework.views import APIView
    
    class BookViewer(APIView):
        def get(self, request, *args, **kwargs):
            return JsonResponse({'status': 'get'})
    
        def post(self, request, *args, **kwargs):
            return JsonResponse({'status': 'post'})
    
        def delete(self, request, *args, **kwargs):
            return HttpResponse(status=status.HTTP_204_NO_CONTENT)
    
[/code]

また、データ型を追加して urls.py コードを修正します。

[code]

    from django.urls import path
    from .views import BookViewer
    
    urlpatterns = [
        path('book/<int:pk>/<str:option>/', BookViewer.as_view()),
    ]
    
[/code]


CC BY-SA 4.0
2023-06-09T11:54:14.140
95165
2023-06-09T14:13:17.917
2023-06-09T14:13:17.917
26370
58577
95143
answer