目錄html
FBV是基於函數的視圖django
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()),
1.研究源碼的突破口spa
url(r'^login/',views.MyLogin.as_view())
猜測:code
as_view要麼是類裏面定義的普通函數 @staticmethod 要麼是類裏面定義的綁定給類的方法 @classmethod
2.進入源碼發現是等價@classmethod類綁定方法,而且返回了view函數名稱htm
3.等價blog
4.view函數返回self.dispatch(request, *args, **kwargs),進去瞅瞅
5.獲取請求方式,並轉成小寫。進self.http_method_names瞅瞅。判斷當前請求方式是否符合默認8個請求方式
6.http_method_names裏面是一堆請求方式的列表。8個
7.退到第5步,if判斷確定經過,繼續往下走
8.根據返回值get,post自動執行相應的函數
1.問題拋出。
django settings源碼 django暴露給用戶一個能夠自定義的配置 可是內部也有默認的配置 用戶配置了就用用戶的 用戶沒有配就用默認的
Django給用戶暴露了一個settings.py的文件。用戶在裏面配置了就用用戶的,若是沒有配置就用Django本身的。原理是如何實現的????