首先定義一個類視圖(CBV)
在urls.py文件中寫上路由對應關系
點擊as_view()方法進入到源碼頁面.可以看到它是一個類方法.返回值是view函數名.當有url進行訪問時,自動執行view函數.view函數會自動執行self.dispatch函數.
接下來,進入到dispatch函數中.首先在這有1個條件判斷.如果request.method.lower()代表http的8種請求方式在self.http_method_names(View類的類屬性)中那么請求方式就被允許返回給handler.如果請求方式不在self.http_method_names中,執行黃色圈出的self.http_method_not_allowed,首先會記錄logging.warning錯誤的日志,然后實例化HttpResponseNotAllowed類,自動執行__init__和__repr__方法返回具體的報錯信息.
總結下:
- 項目啟動時,運行urls.py文件
- url('a/',views.A.as_view())
- A.as_view()執行-----> view函數
- 請求到來時,執行view函數:
- 實例化A----->self
- self.request = request
- 執行View中self.dispatch(request,*args,**kwargs)
- 判斷請求方式是否被允許
- 允許:通過反射獲取請求方式對應的方法----->handler
- 不允許:self.http_method_not_allowed----->handler
- 執行handler獲取到響應
- 判斷請求方式是否被允許