DjangoCBV源碼分析

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())

猜測: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自動執行相應的函數

settings源碼分析

1.問題拋出。

django settings源碼
    django暴露給用戶一個能夠自定義的配置
    可是內部也有默認的配置
    
    用戶配置了就用用戶的 用戶沒有配就用默認的

Django給用戶暴露了一個settings.py的文件。用戶在裏面配置了就用用戶的,若是沒有配置就用Django本身的。原理是如何實現的????

相關文章
相關標籤/搜索