1.html
緩存的地方: 1 內存中 2 文件中(硬盤上) 3 數據庫緩存(硬盤上) 4 redis中(後期都用它,內存上,更快) 5 經過配置,設置緩存位置 -以文件緩存爲例,在settings.py中配置 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', #指定緩存使用的引擎 'LOCATION': '/var/tmp/django_cache', #指定緩存的路徑 'TIMEOUT':300, #緩存超時時間(默認爲300秒,None表示永不過時) 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大緩存記錄的數量(默認300) 'CULL_FREQUENCY': 3, # 緩存到達最大個數以後,剔除緩存個數的比例,即:1/CULL_FREQUENCY(默認3) } } }
2.緩存粒度redis
#這裏說的是先後端混合開發的緩存 1 三種粒度:整站緩存,單頁面緩存,局部緩存 ps:時間越長級別越高,緩存就用級別高的 2 單頁面緩存(用的多) from django.views.decorators.cache import cache_page @cache_page(5) def index(request): import time ctime=time.time() return render(request,'index.html',context={'ctime':ctime}) 3 頁面中某個位置緩存(局部緩存) # 緩存3s鍾。xxx是惟一key,惟一的 {% load cache %} {% cache 3 'xxx'%} 這一部分用緩存 時間爲:{{ ctime }} {% endcache %} 4 整站緩存(兩個中間件)(用的少) # 在setting中配置 ‘django.middleware.cache.UpdateCacheMiddleware’, #第一,重寫了process_response '。。。', ‘django.middleware.cache.FetchFromCacheMiddleware’, #最後,重寫了process_requset # 緩存過時時間 CACHE_MIDDLEWARE_SECONDS=5
3.先後端分離後緩存使用數據庫
1 查出一堆json格式數據,鏈表查了8個表 2 先後端分離之後, -只須要會如何是把字典,字符串,對象放到緩存中, -如何取出來 4 具體使用 #models.py Book表並進行數據遷移 #views.py----這個能夠就是模板,哪裏須要隨便拿着用 from django.core.cache import cache class BookView(APIView): def get(self, request): res_data = cache.get('book_list_dix',) if res_data: # 有緩存,直接返回 print('走了緩存') return Response(res_data) else: # 沒有緩存,再走數據庫 book_list = models.Book.objects.all() ser = serializer.BookSer(book_list, many=True) # 想把ser.data緩存起來 cache.set('book_list_dix', ser.data,100) print('沒走緩存') return Response(ser.data) #serializer.py from app01 import models from rest_framework import serializers class BookSer(serializers.ModelSerializer): class Meta: model=models.Book fields='__all__' #urls.py path('books/', views.BookView.as_view()), 5 cache能夠緩存全部數據類型,包括自定義的類(pickle)
1 Django提供一種信號機制。當發生一些動做的時候,發出信號,而後監聽了這個信號的函數就會執行 2 Django內置信號 Model signals pre_init # django的modal執行其構造方法前,自動觸發 post_init # django的modal執行其構造方法後,自動觸發 pre_save # django的modal對象保存前,自動觸發 post_save # django的modal對象保存後,自動觸發 pre_delete # django的modal對象刪除前,自動觸發 post_delete # django的modal對象刪除後,自動觸發 m2m_changed # django的modal中使用m2m字段操做第三張表(add,remove,clear)先後,自動觸發 class_prepared # 程序啓動時,檢測已註冊的app中modal類,對於每個類,自動觸發 Management signals pre_migrate # 執行migrate命令前,自動觸發 post_migrate # 執行migrate命令後,自動觸發 Request/response signals request_started # 請求到來前,自動觸發 request_finished # 請求結束後,自動觸發 got_request_exception # 請求異常後,自動觸發 Test signals setting_changed # 使用test測試修改配置文件時,自動觸發 template_rendered # 使用test測試渲染模板時,自動觸發 Database Wrappers connection_created # 建立數據庫鏈接時,自動觸發 3 內置信號的使用(兩種方式) # #1 導入內置信號 # from django.core.signals import request_started # #2 寫一個函數 # def aa(sender, **kwargs): # print(sender) # print(kwargs) # print('請求來了,我寫日誌了。。。') # # # #3 跟內置信號綁定 # request_started.connect(aa) # 方式二 from django.core.signals import request_started,request_finished from django.dispatch import receiver @receiver(request_finished) # 內置信號pre_save和my_callback函數綁定了 def my_callback(sender, **kwargs): print("請zzou了,走了我") 4 信號的應用場景: -記錄日誌(對象建立就寫入日誌) -解耦合