[TOC]html
FBV
FBV是基於函數的視圖django
CBV
CBV是基於類的視圖函數
CBV基本寫法
朝login提交get請求會自動執行MyLogin裏面的get方法 而提交post請求也會自動執行MyLogin裏面的post方法 爲何MyLogin針對不一樣的請求方法可以自動執行對應的方法????源碼分析
一樣寫在views.py中post
from django.views import View class MyLogin(View): def get(self,request): return render(request,'login.html') //寫功能 def post(self,request): return HttpResponse('我是類裏面的post方法') /寫功能
urls.py中:url
# CBV路由配置 url(r'^login/',views.MyLogin.as_view()),
CBV源碼分析
1.研究源碼的突破口spa
url(r'^login/',views.MyLogin.as_view())
猜測:3d
as_view要麼是類裏面定義的普通函數 @staticmethod 要麼是類裏面定義的綁定給類的方法 @classmethod
2.進入源碼發現是等價@classmethod類綁定方法,而且返回了view函數名稱code
3.等價htm
函數名加括號,執行優先級最高
4.view函數返回self.dispatch(request, *args, **kwargs),進去瞅瞅
當看到self.屬性或者方法的時候,必定要遵循對象屬性和方法的查找順序。
對象自己--->產生對象的類--->類的父類
5.獲取請求方式,並轉成小寫。進self.http_method_names瞅瞅。判斷當前請求方式是否符合默認8個請求方式
6.http_method_names裏面是一堆請求方式的列表。8個
7.退到第5步,if判斷確定經過,繼續往下走
8.根據返回值get,post自動執行相應的函數
settings源碼分析
1.問題拋出。
django settings源碼 django暴露給用戶一個能夠自定義的配置 可是內部也有默認的配置 用戶配置了就用用戶的 用戶沒有配就用默認的
Django給用戶暴露了一個settings.py的文件。用戶在裏面配置了就用用戶的,若是沒有配置就用Django本身的。原理是如何實現的????