# 第一節:上下文處理器
# 上下文處理器
上下文處理器是可以返回一些數據,在全局模板中都可以使用。比如登錄后的用戶信息,在很多頁面中都需要使用,那么我們可以放在上下文處理器中,就沒有必要在每個視圖函數中都返回這個對象。
在`settings.TEMPLATES.OPTIONS.context_processors`中,有許多內置的上下文處理器。這些上下文處理器的作用如下:
1. `django.template.context_processors.debug`:增加一個`debug`和`sql_queries`變量。在模板中可以通過他來查看到一些數據庫查詢。
2. `django.template.context_processors.request`:增加一個`request`變量。這個`request`變量也就是在視圖函數的第一個參數。
3. `django.contrib.auth.context_processors.auth`:`Django`有內置的用戶系統,這個上下文處理器會增加一個`user`對象。
4. `django.contrib.messages.context_processors.messages`:增加一個`messages`變量。
5. `django.template.context_processors.media`:在模板中可以讀取`MEDIA_URL`。比如想要在模板中使用上傳的文件,那么這時候就需要使用`settings.py`中設置的`MEDIA_URL`來拼接`url`。示例代碼如下:```
<pre class="calibre12">```
<span class="hljs-tag"><<span class="hljs-class">img</span> <span class="hljs-class">src</span>=<span class="hljs-string">""</span> /></span>
```
```
6. `django.template.context_processors.static`:在模板中可以使用`STATIC_URL`。
7. `django.template.context_processors.csrf`:在模板中可以使用`csrf_token`變量來生成一個`csrf token`。
## 自定義上下文處理器:
有時候我們想要返回自己的數據。那么這時候我們可以自定義上下文處理器。自定義上下文處理器的步驟如下:
1. 你可以根據這個上下文處理器是屬于哪個`app`,然后在這個`app`中創建一個文件專門用來存儲上下文處理器。比如`context_processors.py`。或者是你也可以專門創建一個`Python包`,用來存儲所有的上下文處理器。
2. 在你定義的上下文處理器文件中,定義一個函數,這個函數只有一個`request`參數。這個函數中處理完自己的邏輯后,把需要返回給模板的數據,通過字典的形式返回。如果不需要返回任何數據,那么也必須返回一個空的字典。示例代碼如下:```
<pre class="calibre12">```
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">frontuser</span><span class="hljs-params">(request)</span>:</span>
userid = request.session.get(<span class="hljs-string">"userid"</span>)
userModel = models.FrontendUser.objects.filter(pk=userid).first()
<span class="hljs-keyword">if</span> userModel:
<span class="hljs-keyword">return</span> {<span class="hljs-string">'frontuser'</span>:userModel}
<span class="hljs-keyword">else</span>:
<span class="hljs-keyword">return</span> {}
```
```
- Introduction
- 第一章:學前準備
- 第一節:虛擬環境
- 第二節:準備工作
- 第三節:Django介紹
- 第四節:URL組成部分
- 第二章:URL與視圖
- 第一節:第一個Django項目
- 第二節:視圖與URL分發器
- 第三章:模板
- 第一節:模板介紹
- 第二節:模板變量
- 第三節:常用標簽
- 第四節:常用過濾器
- 第五節:自定義過濾器
- 第七節:模版結構優化
- 第八節:加載靜態文件
- 第四章:數據庫
- 第一節:MySQL相關軟件
- 第二節:數據庫操作
- 第三節:ORM模型
- 第四節:模型常用字段
- 第五節:外鍵和表關系
- 第六節:增刪改查操作
- 第七節:查詢操作
- 第八節:QuerySet API
- 第九節:ORM模型遷移
- 第十節:ORM作業
- 第十一節:ORM作業參考答案
- 第十二節:Pycharm連接數據庫
- 第五章:視圖高級
- 第一節:限制請求method
- 第二節:頁面重定向
- 第三節:HttpRequest對象
- 第四節:HttpResponse對象
- 第五節:生成CSV文件
- 第六節:類視圖
- 第七節:錯誤處理
- 第六章:表單
- 第一節:表單概述
- 第二節:用表單驗證數據
- 第三節:ModelForm
- 第四節:文件上傳
- 第七章:cookie和session
- 第八章:上下文處理器和中間件
- 第一節:上下文處理器
- 第二節:中間件
- 第九章:安全
- 第一節:CSRF攻擊
- 第二節:XSS攻擊
- 第三節:點擊劫持攻擊
- 第四節:SQL注入
- 第十章:信號
- 第一節:什么是信號
- 第十一章:驗證和授權
- 第一節:概述
- 第二節:用戶對象
- 第三節:權限和分組
- 第十二章:Admin系統
- 第十三章:Django的緩存
- 第十四章:memcached
- 第十五章:Redis