django學習記錄 RequestContext

2021-06-20 08:38:00 字數 2339 閱讀 1560

官方文件

requestcontext是context的子類,跟context有一些區別

requestcontext強迫第乙個引數是

request

,第二個是乙個構造

context

物件用的字典,第三個是可選的,是乙個自定義的

context processer(

上下文處理器)

requestcontext總是會載入預設的

context processer

context processer是這樣的一種處理器,他會接收

request

作為引數,並且根據

request(

比如request

中的.meta值)

來新增額外的

context

字典到requestcontext

中,與在

requestcontext

中原來的字典結構構成新的

context

傳遞給模板

context processer在配置

settings.py

檔案的template_context_processors中,一般預設有下面幾個:

("django.contrib.auth.context_processors.auth",

"django.core.context_processors.debug",

"django.core.context_processors.i18n",

"django.core.context_processors.media",

"django.core.context_processors.static",

"django.core.context_processors.tz",

"django.contrib.messages.context_processors.messages")

首先,requestcontext會使用你傳入的字典結構構造乙個

context

,之後,上面的處理器順序載入,每乙個處理完後,傳遞給下乙個處理器(就是新增響應的鍵值對到context結構中),下乙個處理器又再處理,所以小心,你手動傳入到context中的字典鍵名不應該與處理器中傳入的的鍵名一樣,否則會在處理器中被覆蓋掉。

並且,requestcontext

總是使用  django.core.context_processors.csrf這個處理器,是生成乙個安全的令牌(token),防止

csrf

攻擊。

你自定義的contextprocessor

是作為第三個引數傳入給

requestcontext

,如(例子來自官方文件)

上述自定義的處理器新增了乙個客戶端位址,然後requestcontext

就包含了

ip_address:******xx這樣的字典結構,當然,是從

request

拿的,這就是為什麼

requestcontext

結構要接受

request

引數的原因了,因為後續的

contextprocessor

也會根據本身的功能充

request

充拿出鍵值對,新增到

context

結構,反饋給模板。

例如:django.contrib.auth.context_processors.auth會加添兩個鍵值對給context

user,乙個

auth.user

的例項,代表當前登入的使用者,若沒有登入,為乙個 anonymoususer,乙個匿名使用者例項

django.contrib.auth.context_processors.request能使得我們可以在模板中可以直接使用request物件

編寫自己的contextprocessor

很簡單了,是乙個函式,接受乙個

request

,並且返回乙個字典。這個字典是用來插入

context

結構的

你可以自己匯入,或者在template_context_processors中新增,注意,template_context_processors是順序載入的

django學習記錄

django的處理流程 當使用者發出http請求,urlhandler接收使用者請求,根據開發人員設定的路由規則匹配相應的處理類 根據請求的型別判斷呼叫的http方法 如果需要連線資料庫,views中的函式將會呼叫models的方法,否則直接去template中取出html頁面直接返回 呼叫mode...

Django學習記錄(三)

postgresql 的配置 安裝postgresql在前面已經有了,再安裝和python的界麵包psycopg2,也在前面寫了 psql postgresql 8.4.18 我操作如下 service postgresql initdb service postgresql start su po...

Django學習記錄(一)

今天嘗試了一下python的django框架 在windows平台下 python 3.6 django 2.1 過程如下 1 安裝python和django環境,不再累述,網上一大堆。2 安裝完畢後,建立django工程,使用命令 django admin.exe startproject pro...