django啟動
我們在啟動一個django項目的時候,無論你是在命令行執行還是在pycharm直接點擊運行,其實都是執行'runserver'的操作,而ruserver是使用django自帶的的web server,主要用于開發和調試中,而在正式的環境中,一般會使用nginx+uwsgi模式。
無論是哪種方式,當啟動一個項目,都會做2件事:
創建一個WSGIServer類的實例,接受用戶的請求。 當一個用戶的http請求到達的時,為用戶指定一個WSGIHandler,用于處理用戶請求與響應,這個Handler是處理整個request的核心。WSGI
WSGI:全稱是Web Server Gateway Interface,WSGI不是服務器,也不用于與程序交互的API,更不是代碼,而只是定義了一個接口,用于描述web server如何與web application通信的規范。
當客戶端發送一次請求后,最先處理請求的實際上是 web 服務器就是我們經常說的 nginx、Apache 這類的 web 服務器,然后web服務器再把請求交給web應用程序(如django)處理,這中間的中介就是WSGI,它把 web 服務器和 web 框架 (Django) 連接起來。
簡單介紹一下WSGI的一些內容,它規定應用是可調用對象(函數/方法),然后它接受2個固定參數:一個是含有服務器端的環境變量,另一個是可調用對象,這個對象用來初始化響應,給響應加上status code狀態碼和httpt頭部,并且返回一個可調用對象??梢钥磦€簡單的例子
# 這段代碼來自python核心編程def simplr_wsgi_app(environ, start_response): # 固定兩個參數,django中也使用同樣的變量名 status = '200 OK' headers = [{'Content-type': 'text/plain'}] # 初始化響應, 必須在返回前調用 start_response(status, headers) # 返回可迭代對象 return ['hello world!']
django中,實現同樣邏輯的是通過WSGIHandler這個類,下面我們也會重點介紹它!
如果對WSGI與uWSGI有興趣的,推薦大家看這篇文章,WSGI & uwsgi ,大贊!
中間件基本概念
顧名思義,中間件是位于Web服務器端和Web應用之間的,它可以添加額外的功能。當我們創建一個django項目(通過pycharm),它會自動幫我們設置一些必要的中間件。
MIDDLEWARE_CLASSES = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',]
中間件要么對來自用戶的數據進行預處理,然后發送給應用;要么在應用將響應負載返回給用戶之前,對結果數據進行一些最終的調整。通俗一點,在django中,中間能夠幫我們準備好request這個對象,然后應用可以直接使用request對象獲取到各類數據,也幫我們將response添加頭部,狀態碼等。
新聞熱點
疑難解答