類(Class): 用來描述具備相同的屬性和方法的對象的集合。它定義了該集合中每一個對象所共有的屬性和方法。對象是類的實例。html
三大特性:python
封裝:數據庫
-- 將內容封裝到對象中django
-- 將方法瘋長到類中api
實例:自定義分頁,restframework的request,session
繼承:框架
-- 將多個類共有的方法提取到父類中,子類僅需繼承父類而沒必要一一實現每一個方法iview
涉及 -- 多繼承socket
-- 經典類 -- 深度優先ide
-- 新式類 -- 廣度優先
實例:restframework的apiview繼承django的view,django的view繼承的基類obj,FORM表單繼承forms,forms繼承基類obj。
多態:
-- 多態指的是一類事物有多種形態
多態:同一種事物的多種形態,動物分爲人類,豬類(在定義角度) import abc class Animal(metaclass=abc.ABCMeta): #同一類事物:動物 @abc.abstractmethod def talk(self): pass class People(Animal): #動物的形態之一:人 def talk(self): print('say hello') class Dog(Animal): #動物的形態之二:狗 def talk(self): print('say wangwang') class Pig(Animal): #動物的形態之三:豬 def talk(self): print('say aoao')
import abc class File(metaclass=abc.ABCMeta): #同一類事物:文件 @abc.abstractmethod def click(self): pass class Text(File): #文件的形態之一:文本文件 def click(self): print('open file') class ExeFile(File): #文件的形態之二:可執行文件 def click(self): print('execute file')
多態性:
-- 多態性是指具備不一樣功能的函數能夠使用相同的函數名,這樣就能夠用一個函數名調用不一樣內容的函數。在面向對象方法中通常是這樣表述多態性:向不一樣的對象發送同一條消息,不一樣的對象在接收時會產生不一樣的行爲(即方法)。也就是說,每一個對象能夠用本身的方式去響應共同的消息。所謂消息,就是調用函數,不一樣的行爲就是指不一樣的實現,即執行不一樣的函數。
#多態:同一種事物的多種形態,動物分爲人類,豬類(在定義角度) import abc class Animal(metaclass=abc.ABCMeta): #同一類事物:動物 @abc.abstractmethod def talk(self): pass class People(Animal): #動物的形態之一:人 def talk(self): print('say hello') class Dog(Animal): #動物的形態之二:狗 def talk(self): print('say wangwang') class Pig(Animal): #動物的形態之三:豬 def talk(self): print('say aoao') peo1=peo() pig1=pig() 多態性:一種調用方式,不一樣的執行效果(多態性) 多態性依賴於:繼承 多態性:定義統一的接口, def func(obj): #obj這個參數沒有類型限制,能夠傳入不一樣類型的值 obj.talk() #調用的邏輯都同樣,執行的結果卻不同 func(peo1) func(pig1)
涉及 -- 鴨子模型
「當看到一隻鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那麼這隻鳥就能夠被稱爲鴨子。」
在鴨子類型中,關注的不是對象的類型自己,而是它是如何使用的。例如,在不使用鴨子類型的語言中,咱們能夠編寫一個函數,它接受一個類型爲鴨的對象,並調用它的走和叫方法。在使用鴨子類型的語言中,這樣的一個函數能夠接受一個任意類型的對象,並調用它的走和叫方法。
請求--wsgi--中間件--URL路由系統--根據url匹配相應的視圖函數--view視圖函數--models--數據庫
--將數據庫返回給視圖--view視圖函數--要展現的數據返回給模版--template模版--渲染成html給用戶
wsgi,是協議 ,不屬於django,django利用wsgi寫socket,請求來到wsig,協議規範wsig和django的程序規範,約束
wsgiref,python模塊,是實現了wsgi協議的一個模塊。模塊本質:一個socket服務端(Django)性能低,測試用的
werkzeug ,是實現了wsgi協議的一個模塊。模塊本質:一個socket服務端(Flask框架)
tornado ,是實現了wsgi協議的一個模塊。模塊本質:本身寫的soket,也能夠用wsgi的,一個socket服務端(tornado框架)
uwsgi,是實現了wsgi協議的一個模塊。模塊本質:一個socket服務端 (Django)線上部署
請求--wsgi--中間件--路由--as.view內部函數view--dispatch--封裝,認證,權限,節流--反射--get,post,delete函數
- process_request - process_view - process_response - process_exception - process_render_template
-- 適用於統一全部請求批量作操做
實例:
-- 角色的權限控制 rbac
-- 用戶認證
-- csrf
-- 訪問給你隨機字符串,再來的時候給我帶過來 放生在 process view 方法
-- session
-- 請求進來拿隨機字符串,去數據庫拿到相關數據 request.session 就是基於這個中間件
-- 黑名單
-- 日誌記錄
a.認證流程
dispatch--封裝request--initial--perform_authticate--request.user--循環authentication對象執行authenticate方法--反射函數
authenticate方法的三種返回值,報錯,元祖(user對象,token對象),None
headers方法
b.權限流程
dispatch--封裝request--initial--perform_authticate--循環執行permission的has_permission方法
has_permission方法的二中返回值,true,false
has_object_permisson方法
c.節流