前言
在綿竹等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),全網(wǎng)營銷推廣,成都外貿(mào)網(wǎng)站建設(shè)公司,綿竹網(wǎng)站建設(shè)費(fèi)用合理。最近面試的時(shí)候,被面試官問道一個問題,就是 request.user 里面的 user 是怎樣得到的,這個問題當(dāng)時(shí)沒有回答上來,可以說是非常的尷尬,所以趕快查了一些資料,看了一些源碼,特地來總結(jié)一下這個問題。
要想回答為什么可以直接通過 request.user 得到請求的用戶,應(yīng)該先來看看請求被處理以及如何返回響應(yīng)的流程。今天先總結(jié)一下 django 從請求到響應(yīng)都進(jìn)行了哪些過程。
WSGI
當(dāng)客戶端發(fā)送一次請求后,最先處理請求的實(shí)際上是 web 服務(wù)器就是我們經(jīng)常說的 nginx、Apache 這類的 web 服務(wù)器,而 WSGI 的作用就是把 web 服務(wù)器和 web 框架 (Django) 連接起來。WSGI 被分為了兩個部分:服務(wù)端和應(yīng)用端。為了處理一個 WSGI 的響應(yīng),服務(wù)端執(zhí)行應(yīng)用程序并向應(yīng)用端提供一個回調(diào)函數(shù),應(yīng)用端處理請求并使用提供的回調(diào)將響應(yīng)返回給服務(wù)端。
本質(zhì)上來講,我覺得 WSGI 就是 web 服務(wù)器和 django 應(yīng)用之間的一個聯(lián)系人。
數(shù)據(jù)流
當(dāng)用戶向你的應(yīng)用發(fā)送一個請求的時(shí)候,一個 WSGI handler 將會被初始化,它會完成以下工作:
中間件
中間件被用在了 django 的許多關(guān)鍵功能中:例如,使用 CSRF 中間鍵來防止跨站請求偽造攻擊。它們也被用來處理會話數(shù)據(jù),身份認(rèn)證和授權(quán)同樣是由中間件來完成的。我們也可以自己編寫中間件來調(diào)整或者(短路)通過應(yīng)用程序的數(shù)據(jù)流。
django 的中間件至少含有以下四個方法中的一個:process_request, process_response, process_view, process_exception。這些方法會被 WSGI handler 收集并按照順序調(diào)用。
process_request
我們可以先來看看 django.contrib.auth.middleware.AuthenticationMiddleware:
def get_user(request): if not hasattr(request, '_cached_user'): request._cached_user = auth.get_user(request) return request._cached_user class AuthenticationMiddleware(MiddlewareMixin): def process_request(self, request): assert hasattr(request, 'session'), ( "The Django authentication middleware requires session middleware " "to be installed. Edit your MIDDLEWARE%s setting to insert " "'django.contrib.sessions.middleware.SessionMiddleware' before " "'django.contrib.auth.middleware.AuthenticationMiddleware'." ) % ("_CLASSES" if settings.MIDDLEWARE is None else "") request.user = SimpleLazyObject(lambda: get_user(request))
網(wǎng)站名稱:從請求到響應(yīng)過程中django都做了哪些處理-創(chuàng)新互聯(lián)
文章出自:http://www.muchs.cn/article6/dhoeig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、定制開發(fā)、全網(wǎng)營銷推廣、電子商務(wù)、網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容