Django 基於類的視圖源碼分析 二

源碼分析

抽象類和經常使用視圖(base.py)

這個文件包含視圖的頂級抽象類(View),基於模板的工具類(TemplateResponseMixin),模板視圖(TemplateView)和重定向視圖(RedirectView)。html

base.py

View及View的執行順序

View是全部基於類的視圖的基類。僅實現了一些基本的方法和必要的檢查工做。其中最重要的是dispatch方法。再次方法中,根據HTTP請求中的method參數,調用相應的同名處理函數。這裏留下了一個口子,後續的類須要根據本身的狀況來填補這個口子最終完成一個視圖的處理。python

  • 屬性
  1. http_method_names 定義全部的Http metho['get','post','put','delete','head','options','trace']。
  • 方法
  1. init 初始化方法

由URLConf調用。包含將關鍵字參數存入實例屬性等功能。函數

若是一個視圖包含一個實例屬性,且在urlpattern中設置了相應的值。將配置的值賦給視圖對象的方法就是由URLConf調用__init__函數時做爲參數傳入。View.__init__負責具體的賦值工做。工具

  1. as_view 類方法(classonlymethod)。返回Function-based視圖函數對象。返回的視圖函數對象("在被調用時")負責實例化視圖,調用視圖的dispatch方法。源碼分析

  2. dispatch 調度函數。根據Http method調用視圖的同名函數post

  3. http_method_not_allowed 返回不被容許的http method處理函數url

TemplateResponseMixin

提供使用模版渲染的工具類。template_name參數用於指定模版。但願具有模版功能的視圖能夠直接繼承此工具累計可。不過咱們不多直接在本身的視圖中繼承此工具類,由於Django已經提供了一組有用的視圖來減小咱們的工做。spa

TemplateView

基於模版的視圖 。須要提供附加數據,能夠在繼承此視圖的子類中,重寫get_context_data方法。經常使用於諸如"about","copyrights" ,"terms"等基於文本的靜態內容。只需設置template_name便可。甚至直接能夠在URLConf中直接指定此參數。code

如:htm

<!-- lang: python -->
url(r'^about/$',TemplateView.as_view(template_name='about.html'))

RedirectView

重定向視圖。能夠說這個視圖提供了徹底的重定向功能。不管是http get、post、delete仍是head、options都將重定向到url參數指定的地址。

permanent 屬性指定是否返回永久(HTTP 301)重定向信息,不然返回臨時重定向(HTTP 302),默認是true.

相關文章
相關標籤/搜索