摘要:使用擴展類使用了視圖集用于緩存返回列表數據的視圖,與擴展類配合使用,實際是為方法添加了裝飾器用于緩存返回單一數據的視圖,與擴展類配合使用,實際是為方法添加了裝飾器為視圖集同時補充和兩種緩存,與和一起配合使用。
在以往的后臺數據訪問時,我們往往都會進行數據庫查詢,基本的流程是這樣的:
圖中發生了三次請求,則很正常向數據庫查詢了三次。但是現在有這樣一個場景:我們有1000個人在一個十分鐘內向一個我們網站都看了同一個文章,那么我們有沒有哪些可以優化我們的后端代碼,因為這只是一篇文章在短時間內就被訪問了1000次,當然我們網站的文章是海量的,那我們該怎么辦?那么我們的數據緩存就派上用場了,基本的流程是這樣的:
在第一次請求的時候查看緩存中(redis)是否有數據,有數據則直接返回響應
若redis中沒有數據,則查詢數據庫
查詢數據庫并將數據保存到redis中,返回響應
這就是我們為什么只查詢了一次數據庫,若有1000次,我們在緩存時間內也只需要查詢一次數據庫,這里向redis中獲取數據也需要耗時,但是由于redis數據存儲在內存中,數據獲取性能較數據庫高了不止一點半點。
那么在drf項目中如何去實現呢?只需要簡單的三步
pip install drf-extensions配置(可以省略)
# DRF擴展 REST_FRAMEWORK_EXTENSIONS = { # 緩存時間 "DEFAULT_CACHE_RESPONSE_TIMEOUT": 60 * 60, }使用
使用cache_response裝飾器
from rest_framework.response import Response from rest_framework import views from rest_framework_extensions.cache.decorators import ( cache_response ) from myapp.models import City class CityView(views.APIView): @cache_response() def get(self, request, *args, **kwargs): cities = City.objects.all().values_list("name", flat=True) return Response(cities)
注意,cache_response裝飾器既可以裝飾在類視圖中的get方法上,也可以裝飾在REST framework擴展類提供的list或retrieve方法上。使用cache_response裝飾器無需使用method_decorator進行轉換。
使用擴展類(使用了視圖集ViewSet)
ListCacheResponseMixin:用于緩存返回列表數據的視圖,與ListModelMixin擴展類配合使用,實際是為list方法添加了cache_response裝飾器
RetrieveCacheResponseMixin:用于緩存返回單一數據的視圖,與RetrieveModelMixin擴展類配合使用,實際是為retrieve方法添加了cache_response裝飾器
CacheResponseMixin:為視圖集同時補充List和Retrieve兩種緩存,與ListModelMixin和RetrieveModelMixin一起配合使用。
from myapps.serializers import UserSerializer from rest_framework_extensions.cache.mixins import CacheResponseMixin class UserViewSet(CacheResponseMixin, viewsets.ModelViewSet):#繼承順序一定在ViewSet前,其實必須在對應的mixin前 serializer_class = UserSerializer
def-extensions官方文檔:http://chibisov.github.io/drf...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45047.html
摘要:使用擴展類使用了視圖集用于緩存返回列表數據的視圖,與擴展類配合使用,實際是為方法添加了裝飾器用于緩存返回單一數據的視圖,與擴展類配合使用,實際是為方法添加了裝飾器為視圖集同時補充和兩種緩存,與和一起配合使用。 在以往的后臺數據訪問時,我們往往都會進行數據庫查詢,基本的流程是這樣的: showImg(https://segmentfault.com/img/bVbooYc?w=784&h...
摘要:使用擴展類使用了視圖集用于緩存返回列表數據的視圖,與擴展類配合使用,實際是為方法添加了裝飾器用于緩存返回單一數據的視圖,與擴展類配合使用,實際是為方法添加了裝飾器為視圖集同時補充和兩種緩存,與和一起配合使用。 在以往的后臺數據訪問時,我們往往都會進行數據庫查詢,基本的流程是這樣的: showImg(https://segmentfault.com/img/bVbooYc?w=784&h...
摘要:后端實現跨域第三方擴展在介紹之前,我先介紹兩個概念同源策略跨域同源策略同源策略是一種約定,是瀏覽器的一種安全機制。這里同源需要協議域名端口三者都相同,否則不能進行訪問。跨域不同源之間的網站通信就是跨域。 在使用django-rest-framework開發項目的時候我們總是避免不了跨域的問題,因為現在大多數的項目都是前后端分離,前后端項目部署在不同的web服務器上,因為我們是后端程序員...
閱讀 1442·2023-04-25 16:31
閱讀 2044·2021-11-24 10:33
閱讀 2749·2021-09-23 11:33
閱讀 2534·2021-09-23 11:31
閱讀 2911·2021-09-08 09:45
閱讀 2341·2021-09-06 15:02
閱讀 2650·2019-08-30 14:21
閱讀 2319·2019-08-30 12:56