首页 > 其他分享 >django接口缓存

django接口缓存

时间:2024-05-16 15:33:01浏览次数:17  
标签:缓存 cache list 接口 django common key import data

接口缓存

普通缓存

common_mixin.py

from rest_framework.mixins import ListModelMixin
from .common_logger import logger
from utils.common_response import APIResponse

from django.core.cache import cache
class APIListModelMixin(ListModelMixin):
    cache_key = None

    def list(self, request, *args, **kwargs):
        assert self.cache_key, '必须设置cache_key'
        data_list = cache.get(self.cache_key)
        if not data_list:
            logger.info('走数据库')
            data_list = super().list(request, *args, **kwargs).data
            cache.set(self.cache_key, data_list)
        return APIResponse(results=data_list)

views.py

from rest_framework.viewsets import GenericViewSet
from utils.common_mixin import APIListModelMixin
from .models import Banner
from .serializer import Bannerserializer
class BannerView(GenericViewSet,APIListModelMixin):
    queryset = Banner.objects.all()
    serializer_class = Bannerserializer
    cache_key = 'banner_list'

缓存装饰器

common_mixin.py

from .common_logger import logger
from utils.common_response import APIResponse
from django.core.cache import cache


def redis_cache(cache_key):
    def decorator(view_func):
        def wrapper(self, request, *args, **kwargs):
            data = cache.get(cache_key)
            if data is None:
                response = view_func(self, request, *args, **kwargs)
                data = response.data
                cache.set(cache_key, data)
            else:
                logger.info('使用缓存')
                response = APIResponse(results=data)
            return response
        return wrapper
    return decorator

views.py

from rest_framework.mixins import ListModelMixin
from rest_framework.viewsets import GenericViewSet
from utils.common_mixin import redis_cache
from utils.common_response import APIResponse
from .models import Banner
from .serializer import Bannerserializer


class BannerView(GenericViewSet,ListModelMixin):
    queryset = Banner.objects.all()
    serializer_class = Bannerserializer

    @redis_cache(cache_key='banner_list')
    def list(self, request, *args, **kwargs):
        data_list =super().list(request, *args, **kwargs).data
        return APIResponse(results=data_list)

标签:缓存,cache,list,接口,django,common,key,import,data
From: https://www.cnblogs.com/unrealqcc/p/18196028

相关文章

  • 免费的天气接口api(腾讯)
    请求URL:https://wis.qq.com/weather/common请求方式:GET参数:参数名必选类型说明source是stringpcweather_type是stringobserveprovince是string省city是string市county是string县 请求示例https://wis.qq.com/weather/common?source=pc&weather_typ......
  • 接口自动化测试框架【python+requests+pytest+excel+allure+jenkins】
    一.在整个框架中需要用到哪些东西?1.python环境安装https://www.python.org/downloads/windows/下载解压后直接安装,选择Addpythontopath2.JAVA环境配置安装包下载地址:https://www.oracle.com/java/technologies/downloads/环境变量设置参数如下:●变量名:JAVA_HOME●变......
  • 营业执照识别接口:通过API实现营业执照识别功能
      营业执照识别接口是一种通过API实现的功能,可以对不同版式的营业执照进行识别,提取其中的证件编号、社会信用代码、单位名称、地址、法人、类型、成立日期、有效日期、经营范围等关键字段。这个功能在很多场景下都可以发挥作用,比如在企业注册、信用查询、合作伙伴选择等方面......
  • Django3.2使用xadmin2遇到的问题
    使用xadmin2遇到的问题&解决环境配置:使用的模块版本:关联的包Django3.2.15mysqlclient2.2.4xadmin2.0.1django-crispy-forms>=1.6.0django-import-export>=0.5.1django-reversion>=2.0.0django-formtools==2.1future......
  • 【django学习-28】列表界面模板下载与上传文件
    前言,我们在实际项目开发过程中,经常有列表界面,有上传功能,并且支持先下载模板,后上传1.实现效果与前端展示<formmethod="post"enctype="multipart/form-data"action="/depart/multi/">{%csrf_token%}<divclass="form-group"><inputtyp......
  • Garnet:微软官方基于.NET开源的高性能分布式缓存存储数据库
    前言前不久Redis宣布从Redis7.4开始,将原先比较宽松的BSD源码使用协议修改为RSALv2和SSPLv1协议,该协议变化意味着Redis不再开源。今天给大家分享一款完全开源(MIT协议)、免费的Redis替代性项目产品:Garnet。Redis开源协议详情:https://github.com/redis/redis?tab=License-......
  • 【django学习-27】media介绍与文件上传
    前言:django开发过程中,有2个文件夹(也即:目录)比较特殊:static文件夹(目录)、media文件夹(目录)。static目录:我们项目自己用到的文件(css、js、项目图片、插件),建议放在static目录下。media目录:用户自己上传的文件等资源,建议放在media目录下。要想用media目录,必须先配置启用它。1.me......
  • django中使用redis
    【1】通用方式########写个pool.pyimportredisPOOL=redis.ConnectionPool(max_connections=10,decode_responses=True)######在哪里用,导入用即可fromutils.poolimportPOOLimportredisclassRedisView(ViewSet):deflist(self,request):conn=red......
  • 【django学习-26】图片验证码
    1.我们在登录的时候,经常看到输入用户名、密码之外。还需要输入验证码。这个验证码是怎么实现的呢?2.前端{%loadstatic%}<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><linkrel="styleshee......
  • 【django学习-25】登录及使用中间件进行登录校验
    1.登录功能实现1.1:管理员表fromdjango.dbimportmodelsclassAdmin(models.Model):"""管理员"""username=models.CharField(verbose_name="用户名",max_length=32)password=models.CharField(verbose_name="密码......