Django 學習第十一天——中間鍵和上下文處理器
一、中間鍵的引入:
Django中介軟體(Middleware)是一個 輕量級、底層的 “外掛”系 統,可以介入 Django的請求和響應處理過程, 修改 Django的輸入或輸出.
django中的中間鍵:
django 中的中介軟體(middleware),在django中,中介軟體其實就是一個類,在請求到來和結束後,django會根據自己的規則在合適的時機執行中介軟體中相應的方法。
在 django專案的settings模組中,有一個 MIDDLEWARE_CLASSES 變數,其中每一個元素就是一箇中間件.
自定義中間鍵檔案可以放在改專案的任意可以匯入的地方 (一般放在 app根目錄裡面)
一箇中間鍵就是一個可呼叫的物件,他會接收一個 request並返回一個請求
自定義一箇中間鍵可以是一個函式:
def xxx(get_response):# (中間鍵工廠)函式名自定義,傳的這個引數必須是這個名字 # 這裡寫一次性的設定和初始化:在 start project 的時候執行的,只執行一次 def xx(request):# (中間鍵)函式名自定義,傳的這個引數必須是這個名字 # 這裡寫處理請求之前的程式碼 # 檢視將會被呼叫,或者後面的中間鍵會執行 response = get_response(request) # 處理請求響應之後的程式碼(檢視已經被呼叫了) return response return xx# 返回自定義的中間鍵
啟用(註冊)中間鍵:在 setttings.py 檔案裡的 MIDDLEWARE 列表裡新增自定義的中間鍵工廠 全路徑(到中間鍵工廠;新增到最後)
例子:定義一個只能讓谷歌瀏覽器訪問的網站
from django.http import HttpResponseForbidden def xxx(get_response):# (中間鍵工廠)函式名自定義,傳的這個引數必須是這個名字 def xx(request):# (中間鍵)函式名自定義,傳的這個引數必須是這個名字 user_angent = reqeust.META['HTTP_USER_AGENT']# 獲取請求的源資訊中的 USER_AGENT if not 'chrome' in user_agent.lower():# 判斷 chrome(谷歌瀏覽器) 在不在裡面;忽略大小寫(都用小寫的) return HttpRespinseForbidden() response = get_response(request) return response return xx# 返回自定義的中間鍵
自定義一箇中間鍵也可以是一個類:(這個的例項可以被呼叫)
class Xxx:(中間鍵工廠)類名自定義 def __init__(self,get_response):# 傳的這個引數必須是這個名字 self.get_response = get_response # 這裡寫一次性的設定和初始化:在 start project 的時候執行的,只執行一次 def __call__(self.request): # 這裡寫處理請求之前的程式碼 # 檢視將會被呼叫,或者後面的中間鍵會執行 response = self.get_response(request) # 處理請求響應之後的程式碼(檢視已經被呼叫了) return response
啟用(註冊)中間鍵:在 setttings.py 檔案裡的 MIDDLEWARE 列表裡新增自定義的中間鍵工廠 全路徑(到中間鍵工廠;新增到最後)
請求和響應順序:
按照 settings.py 檔案 中的 MIDDLEWARE 列表順序來的;請求的時候從前往後(從第一個到最後一個);響應的時候從後往前(從最後一個到第一個)
二、上下文處理器:
所有頁面都需要特定變數
自定義上下文處理器也可以放在該專案的任意可以匯入的地方(一般放在 app根目錄裡面)
自定義上下文處理器也可以是一個函式:
def xxx(request):# 傳入必須是 request 這個名字當引數 return {'key':'value'}# 必須返回一個字典型別的物件;獲取用 key 就可以了
啟用(註冊):在 settings.py 檔案裡的 TEMPLATES 中的 OPTIONS 中的 'context_processors' 裡面新增自定義的上下文處理器的全路徑(新增到最後)
注意: 如果在檢視( views)中有相同的 key 被傳入,那麼將會使用 該 views 中的key
中間鍵和上下文總結:
中介軟體是在使用者請求到響應的過程中去加入一些額外的邏輯功能
上下文是給所有的模板增加變數
三、 django admin後臺:
配置 admin.py 檔案:
from django.contrib import admin from .models import 自定義表1,自定義表2 admin.site.register(自定義表1) admin.site.register(自定義表2)
建立超級管理員:(命令列在專案根目錄輸入)
python manage.py createsuperuser
需要:使用者名稱;郵箱;密碼
配置 url:(預設是配置好的)
進入 django後臺:
瀏覽器輸入: ip:埠/admin
輸入剛剛新建的使用者名稱,密碼
設定中文和中國時間:
在 settings.py 檔案裡設定:
自定義管理頁面:
Django提供了admin.ModelAdmin類
通過定義 ModelAdmin的子類,來定義模型在Admin介面的顯示方式
列表頁屬性:
list_display:顯示欄位,可以點選列頭進行排序;等於一個列表;
list_display_links:點選該欄位可以進入編輯頁,可以寫多個;等於一個列表
list_filter:過濾欄位,過濾框會出現在右側;等於一個列表;
search_fields:搜尋欄位,搜尋框會出現在上側;等於一個列表;
list_per_page:分頁,分頁框會出現在下側;等於一個整數(頁數)
新增、修改頁屬性:
fields:屬性的先後順序;等於一個列表
fieldsets:屬性分組;等於一個列表
注意:上面兩個屬性,二者選一。
註冊的時候需要把它的管理類一起註冊進去