drf-快取相關
阿新 • • 發佈:2020-07-15
settings.py檔案的配置
# 快取相關配置 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', # 指定快取使用的引擎 'LOCATION': 'D:\django_cache', # 指定快取的路徑 'TIMEOUT': 300, # 快取超時時間(預設為300秒,None表示永不過期) 'OPTIONS': { 'MAX_ENTRIES': 300, # 最大快取記錄的數量(預設300)'CULL_FREQUENCY': 3, # 快取到達最大個數之後,剔除快取個數的比例,即:1/CULL_FREQUENCY(預設3) } } }
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware', # 第一 位置必須放這裡
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware', # 最後 位置必須放這裡
]第一個位置和最後一個位置是必須放正確的,不然會報錯,中間是本來的中介軟體
在檢視檔案views.py檔案中進行快取相關書寫
# 單頁面快取 from django.views.decorators.cache import cache_page class Person: #自己書寫這個類,後面都可以例項化,進行資料的儲存和呼叫 def __init__(self, name, age): self.name = name self.age = age from django.core.cache import cache # @cache_page(5) # 這裡是快取5秒 def test1_cache(request): p = Person('egon', 18) # 例項化 cache.set('name', p) # 快取的儲存 import time ctime = time.time() # 給頁面快取一個時間而已 print('xxxxx') # 測試用的 不要也行 return render(request, 'index.html', context={'ctime': ctime}) # render三板斧的格式語句, 給index這個頁面,返回 ctime這個變數:ctime def test2_cache(request): p = cache.get('name')# 獲取快取中的資料 print(p.name) # 可以在後臺打印出來,後續若是想想用,可以直接呼叫的 import time ctime = time.time() return render(request, 'index.html', context={'ctime': ctime}) # render三板斧的格式語句, 給index這個頁面,返回 ctime這個變數:ctime
配置完檢視後加路由
from app_jwt import views from django.urls import path, re_path from rest_framework_jwt.views import obtain_jwt_token urlpatterns = [ # 快取 path('test1/',views.test1_cache), path('test2/',views.test2_cache), ]
測試test1進行儲存 ,test2進行獲取
後臺就能看到獲取的快取資料,也就是例項化的使用者名稱
# 前後端分離快取的使用 - 如何使用 from django.core.cache import cache cache.set('key',value可以是任意資料型別) cache.get('key') -應用場景: -第一次查詢所有圖書,你通過多表聯查序列化之後的資料,直接快取起來 -後續,直接先去快取查,如果有直接返回,沒有,再去連表查,返回之前再快取