標籤:接收 形式 網域名稱跳轉 的區別 程式 提高 模組 改變 支援
1.對Django的認識
1.Django是走大而全的方向,它最出名的是其全自動化的管理後台:只需要使用起ORM,做簡單的對象定義,它就能自動產生資料庫結構、以及全功能的管理後台。
2.Django內建的ORM跟架構內的其他模組耦合程度高。
應用程式必須使用Django內建的ORM,否則就不能享受到架構內提供的種種基於其ORM的便利;
理論上可以切換掉其ORM模組,但這就相當於要把裝修完畢的房子拆除重新裝修,倒不如一開始就去毛胚房做全新的裝修。
3.Django的賣點是超高的開發效率,其效能擴充有限;採用Django的項目,在流量達到一定規模後,都需要對其進行重構,才能滿足效能的要求。
4.Django適用的是中小型的網站,或者是作為大型網站快速實現產品雛形的工具。
5.Django模板的設計哲學是徹底的將代碼、樣式分離; Django從根本上杜絕在模板中進行編碼、處理資料的可能。
2.Django 、Flask、Tornado的對比
1.Django走的是大而全的方向,開發效率高。它的MTV架構,內建的ORM,admin後台管理,內建的sqlite資料庫和開發測試用的伺服器給開發人員提高了超高的開發效率2.Flask是輕量級的架構,自由,靈活,可擴充性很強,核心基於Werkzeug WSGI工具和jinja2模板引擎3.Tornado走的是少而精的方向,效能優越。它最出名的是非同步非阻塞的設計方式 Tornado的兩大核心模組: 1.iostraem:對非阻塞式的socket進行簡單的封裝 2.ioloop:對I/O多工封裝,它實現了一個單例
3.什麼是WSGI,uwsgi,uWSGI?
1.WSGI,web伺服器網關介面,是一套協議。用於接收使用者請求並將請求進行初次封裝,然後將請求交給web架構(描述web server和webapplication的通訊規則)
WSGI server負責從用戶端接收請求,將request轉寄給application,將application返回的response返回給用戶端;
2.uwsgi,與WSGI一樣是一種通訊協定,它是uWSGI伺服器的獨佔協議,用於定義傳輸資訊的類型
3.uWSGI, 是一個web伺服器,實現了WSGI協議,uWSGI協議,http協議,
4.Django請求的生命週期
1.WSGI,將請求封裝之後交給web架構
2.中介軟體,對請求對象進行校正或者添加其他資料比如:csrf
3.路由匹配,根據不同的url匹配不同的視圖函數
4.視圖函數,在視圖函數中對請求進行處理(可能涉及到ORM,Template渲染)
5.中介軟體,對響應的資料進行處理
6.WSGI,,將響應的內容發送給瀏覽器
5.FBV和CBV
FBV:基於函數的視圖
CBV:基於類的視圖
使用CBV的優點:
1.提高了代碼的複用性,可以使用物件導向的技術,比如(多繼承)
2.可以使用不同的函數對不同的HTTP方法進行處理,而不是使用if...else...判斷,提高可讀性
6.給CBV程式添加裝飾器
1.引入method_decorator模組
2.直接在類上添加裝飾器
3.直接在方法上添加裝飾器
7.簡述MVC和MTV
MVC軟體系統分為三個部分:模型(Model)、視圖(View)和控制器(Controller)
Model:負責業務對象和資料庫的映射
View:負責與使用者的互動
Controller:接受使用者的輸入調用模型和視圖完成使用者的請求
MTV軟體系統分為三個部分:模型(Model),模板(Templates),視圖(View)
Model: 負責業務對象和資料庫的映射
Template:負責把頁面展示給使用者
View: 負責與使用者的互動(需要的時候調用Model和Template)
8.Django路由系統中name的作用
使用者反向解析路由,相當於給url起了個別名,只要名字不變,即使路由改變,也能通過此名字找到路由
9.列舉Django的內建群組件:
1.Admin是對model中對應的資料表進行增刪改查提供的組件
2.model組件:負責操作資料庫
3.form組件:1.產生HTML代碼2.資料有效性校正3校正資訊返回並展示
4.ModelForm組件即用於資料庫操作,也可用於使用者請求的驗證
10.Django中介軟體的作用和應用情境
中介軟體是介於request與response處理之間的一道處理過程,用於在全域範圍內改變Django的輸入和輸出。
簡單的來說中介軟體是協助我們在視圖函數執行之前和執行之後都可以做一些額外的操作
eg:
1.Django項目中預設啟用了csrf保護,每次請求時通過CSRF中介軟體檢查請求中是否有正確#token值
2.當使用者在頁面上發送請求時,通過自訂的認證中介軟體,判斷使用者是否已經登陸,未登陸就去登陸。
11.Django中介軟體的幾個方法
1.process_request : 請求進來時,許可權認證 2.process_view : 路由匹配之後,能夠得到視圖函數 3.process_exception : 異常時執行 4.process_template_responseprocess : 模板渲染時執行 5.process_response : 請求有響應時執行
12.django的request對象是在什麼時候建立的( wsgi.py)
class WSGIHandler(base.BaseHandler):
request = self.request_class(environ) 請求走到WSGIHandler類的時候,執行__cell__方法,將environ封裝成了request
13.Django重新導向的實現
1.使用HttpResponseRedirect
2.使用redirect和reverse
3.狀態代碼:301和302
301:常用來做網域名稱跳轉(舊資源已經移除,跳轉到新資源)
302:常用來做臨時跳轉(要訪問的資源還在,但是沒有條件訪問)
14 csrf實現機制
第一步:django第一次響應來自某個用戶端的請求時,後端隨機產生一個token值,把這個token儲存在SESSION狀態中;同時,後端把這個token放到cookie中交給前端頁面;
第二步:下次前端需要發起請求(比如發帖)的時候把這個token值加入到請求資料或者頭資訊中,一起傳給後端;Cookies:{csrftoken:xxxxx}
第三步:後端校正前端請求帶過來的token和SESSION裡的token是否一致;
15基於django使用ajax發送post請求時,都可以使用哪種方法攜帶csrf token?
以索引值對的形式放到要傳輸的資料data中
16.Django本身提供了runserver,為什麼不能用來部署?(runserver與uWSGI的區別)
1.runserver方法是調試 Django 時經常用到的運行方式,它使用Django內建的WSGI Server 運行,主要在測試和開發中使用,並且 runserver 開啟的方式也是單進程 。
2.uWSGI是一個Web伺服器,它實現了WSGI協議、uwsgi、http 等協議。注意uwsgi是一種通訊協定,而uWSGI是實現uwsgi協議和WSGI協議的 Web 服務器。uWSGI具有超快的效能、低記憶體佔用和多app管理等優點,並且搭配著Nginx就是一個生產環境了,能夠將使用者訪問請求與應用 app 隔離開,實現真正的部署 。相比來講,支援的並發量更高,方便管理多進程,發揮多核的優勢,提升效能。
Django基礎知識點