Django在中間件中預置了六個方法,這六個方法的區別在於不同的階段執行,對輸入或輸出進行干預,方法如下:
1.初始化:無需任何參數,服務器響應第一個請求的時候調用一次,用於確定是否啟用當前中間件
def __init__():
pass
2.處理請求前:在每個請求上調用,返回None或HttpResponse對象。
def process_request(request):
pass
3.處理視圖前:在每個請求上調用,返回None或HttpResponse對象。
def process_view(request,view_func,view_args,view_kwargs):
pass
4.處理模板響應前:在每個請求上調用,返回實現了render方法的響應對象。
def process_template_response(request,response):
pass
5.處理響應後:所有響應返回浏覽器之前被調用,在每個請求上調用,返回HttpResponse對象。
def process_response(request,response):
pass
6.異常處理:當視圖拋出異常時調用,在每個請求上調用,返回一個HttpResponse對象。
def process_exception(request,exception):
pass
一般是用戶通過浏覽器向我們的服務器發起一個請求(request),這個請求會去訪問視圖函數,如果不涉及到數據調用,那麼這個時候視圖函數返回一個模板也就是一個網頁給用戶; 視圖函數調用模型類去數據庫查找數據,視圖函數把返回的數據填充到模板中空格中,最後返回網頁給用戶。
1.wsgi ,請求封裝後交給web框架(Flask,Django)
2.中間件,對請求進行校驗或在請求對象中添加其他相關數據,例如:csrf,request.session
3.路由匹配 根據浏覽器發送的不同url去匹配不同的視圖函數
4.視圖函數,在視圖函數中進行業務邏輯的處理,可能涉及到:orm,templates
5.中間件,對響應的數據進行處理
6.wsgi,將響應的內容發送給浏覽器
Session采用的是在服務器端保持狀態的方案,而Cookie采用的是在客戶端保持狀態的方案。但是禁用Cookie就不能得到Session。因為Session是用Session ID來確定當前對話所對應的服務器Session,而Session ID是通過Cookie來傳遞的,禁用Cookie相當於SessionID,也就得不到Session。
1.Django中耗時的任務用一個進程或者線程來執行,比如發郵件,使用celery.
2.部署django項目是時候,配置文件中設置了進程和協程的相關配置。
1.uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。它是一個Web服務器(如nginx,uWSGI等服務器)與web應用(如用Flask框架寫的程序)通信的一種規范。
要注意WSGI/uwsgi/uWSGI這三個概念的區分。
WSGI是一種通信協議。
為什麼有了uWSGI為什麼還需要nginx?
因為nginx具備優秀的靜態內容處理能力,然後將動態內容轉發給uWSGI服務器,這樣可以達到很好的客戶端響應。
nginx 是一個開源的高性能的HTTP服務器和反向代理:
1.作為web服務器,它處理靜態文件和索引文件效果非常高
2.它的設計非常注重效率,最大支持5萬個並發連接,但只占用很少的內存空間
3.穩定性高,配置簡潔。
4.強大的反向代理和負載均衡功能,平衡集群中各個服務器的負載壓力應用
class getCurrenttime(APIView):
def get(self,request):
local_time = time.localtime()
time_zone =settings.TIME_ZONE
temp = {
'localtime':local_time,'timezone':time_zone}
return Response(temp)
1、 Django走的大而全的方向,開發效率高。它的MTV框架,自帶的ORM,admin後台管理,自帶的sqlite數據庫和開發測試用的服務器,給開發者提高了超高的開發效率。 重量級web框架,功能齊全,提供一站式解決的思路,能讓開發者不用在選擇上花費大量時間。
自帶ORM和模板引擎,支持jinja等非官方模板引擎。
自帶ORM使Django和關系型數據庫耦合度高,如果要使用非關系型數據庫,需要使用第三方庫
自帶數據庫管理app
成熟,穩定,開發效率高,相對於Flask,Django的整體封閉性比較好,適合做企業級網站的開發。python web框架的先驅,第三方庫豐富
2、 Flask 是輕量級的框架,自由,靈活,可擴展性強,核心基於Werkzeug WSGI工具 和jinja2 模板引擎
適用於做小網站以及web服務的API,開發大型網站無壓力,但架構需要自己設計
與關系型數據庫的結合不弱於Django,而與非關系型數據庫的結合遠遠優於Django
3、 Tornado走的是少而精的方向,性能優越,它最出名的異步非阻塞的設計方式
Tornado的兩大核心模塊:
iostraem:對非阻塞的socket進行簡單的封裝
ioloop: 對I/O 多路復用的封裝,它實現一個單例