国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

django從請求到響應的過程深入講解

2020-02-15 22:37:30
字體:
來源:轉載
供稿:網友

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添加頭部,狀態碼等。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 图们市| 萨嘎县| 武强县| 新乐市| 东港市| 专栏| 哈尔滨市| 新干县| 民权县| 淮南市| 晋江市| 广南县| 德化县| 天镇县| 登封市| 利辛县| 昂仁县| 栾川县| 香格里拉县| 于都县| 克拉玛依市| 酒泉市| 绥滨县| 潜江市| 盈江县| 陇南市| 靖边县| 彰化市| 福州市| 绥芬河市| 同江市| 峨山| 财经| 西昌市| 夏津县| 平遥县| 临西县| 莱西市| 昌都县| 大姚县| 龙州县|