django類視圖的as_view執行流程


  首先定義一個類視圖(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__方法返回具體的報錯信息.

 

 

 

 

 

 

   總結下:

  1. 項目啟動時,運行urls.py文件
    1. url('a/',views.A.as_view())
    2. A.as_view()執行-----> view函數
  2. 請求到來時,執行view函數:
    1. 實例化A----->self
    2. self.request = request
    3. 執行View中self.dispatch(request,*args,**kwargs)
      1. 判斷請求方式是否被允許
        1. 允許:通過反射獲取請求方式對應的方法----->handler
        2. 不允許:self.http_method_not_allowed----->handler
      2. 執行handler獲取到響應


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM