drf APIView及其內部函式 類的原始碼分析

2022-06-15 11:06:16 字數 2193 閱讀 3935

1apiview的as_view

-內部還是執行了view的閉包函式view

-禁用掉了csrf

-一切皆物件,函式也是物件 函式位址.name=lili

2原生view類中過的as_view中的閉包函式view

-本質執行了self.dispatch(request, *args, **kwargs),執行的是apiview的dispatch

#

drf:apiview的原始碼分析

def as_view(cls, **initkwargs):

#這句話執行完成返回 view閉包函式的記憶體位址

view = super().as_view(**initkwargs) #

呼叫父類(view)的as_view

view.cls =cls

view.initkwargs =initkwargs

view=csrf_exempt(view) #

區域性禁用csrf

return

view #

裝飾器的使用方式

@csrf_exempt ====>view=csrf_exempt(view)

defview():

pass

#請求來了,會執行上面返回的view()---->self.dispatch(apiview的dispatch)

#

apiview的dispatch原始碼分析

def dispatch(self, request, *args, **kwargs):

#把原生的request,封裝進新的request物件(drf的request)

#drf的request類的物件,內部有request._request,它就是原生request

request = self.initialize_request(request, *args, **kwargs)

self.request =request

try:

self.initial(request, *args, **kwargs)

'''#認證,許可權,頻率

#這個request新的requst,是drf中request物件

#response是原生response

response = handler(request, *args, **kwargs)

except

exception as exc:

#全域性的異常捕獲

response =self.handle_exception(exc)

#把檢視函式(類)返回的response,又包裝了一下

self.response = self.finalize_response(request, response, *args, **kwargs)

return self.response

request類

-request._request:原生request

-request.data : post請求提交的資料(urlencoded,json,formdata)

-request.user :不是原生的user了

-request.query_params :原生的request.get,為了遵循restful規範

-requset.files :新的

-重寫了__getattr__,新的request.原來所有的屬性和方法,都能直接拿到

def__getattr__

(self, attr):

return getattr(self._request, attr)

晶振及其內部電路詳解

晶振及其內部電路詳解 晶振原理 晶振,在電氣上它可以等效成乙個電容和乙個電阻併聯再串聯乙個電容的二端網路,電工學上這個網路有兩個諧振點,以頻率的高低分其中較低 的頻率是串聯諧振,較高的頻率是併聯諧振。由於晶體自身的特性致使這兩個頻率的距離相當的接近,在這個極窄的頻率範圍內,晶振等效為乙個電感,所以只...

晶振及其內部電路詳解

晶振原理 晶振,在電氣上它可以等效成乙個電容和乙個電阻併聯再串聯乙個電容的二端網路,電工學上這個網路有兩個諧振點,以頻率的高低分其中較低 的頻率是串聯諧振,較高的頻率是併聯諧振。由於晶體自身的特性致使這兩個頻率的距離相當的接近,在這個極窄的頻率範圍內,晶振等效為乙個電感,所以只要晶振的兩端併聯上合適...

Oracle的表連線查詢及其內部執行機制

一 內連線 內連線查詢操作列出與連線條件匹配的資料行,它使用比較運算子比較被連線列的列值。內連線分三種 1 等值連線 在連線條件中使用等於號 運算子比較被連線列的列值,其查詢結果中列出被連線表中的所有列,包括其中的重複列。2 不等連線 在連線條件使用除等於運算子以外的其它比較運算子比較被連線的列的列...