標題賊饒舌

# 今天的 issue

要給記帳本的五個圖表各一個 get 方法,選了最老套 JSON-RPC 的寫法,但又想用一個類集中管理這些 def,但實作上遇到了些問題

調整中的寫法
urls.py

path('canva/CurrentMonthPie', views.CanvaView.as_view(),name='current_month_pie'),

views.py

class CanvaView(GenericAPIView):
    def current_month_pie(self, request):
        accounts = Account.objects.all()
        data = {}
        return ResponseTool.success_json_res(data)

遇到的問題

Method "GET" not allowed.

相關文章:

  • detail": "Method "GET" not allowed. | Django Rest Framework
    • 讀下來調整了一下 urls.py 的寫法,但還是噴一樣的錯誤 ;w; ,但我注意到它這邊有個裝飾器欸
      • 【零基礎成為 AI 解夢大師秘笈】Day10 - Django VII:照著加了還是一樣的問題
    • 繼續觀察第一篇文章的代碼,改成直接呼叫 def 呢?
      • 調用學問大... 2 3

好唄... 讀了這麼多篇,總之不同寫法要注意它父類別或裝飾器傳參的細節,才不會出現類似

TypeError: View.as_view.<locals>.view () missing 1 required positional argument: 'request' #沒加裝飾器會變成缺 2,但如果不知道自己在幹嘛就會被誤導 ==

AssertionError: The request argument must be an instance of django.http.HttpRequest , not myapp.views.CanvaView .

TypeError: CanvaView.current_month_pie() takes 1 positional argument but 2 were given

改良後可以打通的寫法
urls.py

path('canva/CurrentMonthPie', views.CanvaView().current_month_pie), # CanvaView () 表這個物件本身,這樣才能正確調用到 def,不然它會說它找不到 沒有這個成員

views.py

class CanvaView(GenericAPIView):
#後來又把裝飾器拔掉惹ˊ_>ˋ
    def current_month_pie(self, request):
        accounts = Account.objects.all()
        data = {}
        return ResponseTool.success_json_res(data)

哇,總覺得這裡有個坑... 是該好好研究一下..

得從 DRF 的基礎了解

  • Django REST Framework 学习笔记
    • 姆姆姆... 好像用 ViewSet 寫更漂亮.. 而且它本來就是讓人指定傳參的
    • 沒有類的世界,直接調用 def,上方 stackoverflow 也有人提出這種解答
  • Django Rest FrameWork 基礎筆記

唉,沒頭沒腦 錯中學