[TOC] FBV FBV是基於函數的視圖 CBV CBV是基於類的視圖 CBV基本寫法 朝login提交get請求會自動執行MyLogin裡面的get方法 而提交post請求也會自動執行MyLogin裡面的post方法 為什麼MyLogin針對不同的請求方法能夠自動執行對應的方法??? ...
目錄
FBV
FBV是基於函數的視圖
CBV
CBV是基於類的視圖
CBV基本寫法
朝login提交get請求會自動執行MyLogin裡面的get方法
而提交post請求也會自動執行MyLogin裡面的post方法
為什麼MyLogin針對不同的請求方法能夠自動執行對應的方法????
同樣寫在views.py中
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中:
# CBV路由配置
url(r'^login/',views.MyLogin.as_view()),
CBV源碼分析
1.研究源碼的突破口
url(r'^login/',views.MyLogin.as_view())
猜想:
as_view要麼是類裡面定義的普通函數 @staticmethod
要麼是類裡面定義的綁定給類的方法 @classmethod
2.進入源碼發現是等價@classmethod類綁定方法,並且返回了view函數名稱
3.等價
4.view函數返回self.dispatch(request, *args, **kwargs),進去瞅瞅
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自己的。原理是如何實現的????