JAVA网络爬虫
HttpClient

导航

 

drf缓存–redis缓存存储CacheResponseMixin的缓存数据

  • 安装包

    pip3 install drf-extensions
    pip3 install django-redis
    
  • view–在你需要缓存的视图里加上CacheResponseMixin, 记住一定要放在第一位

    # drf缓存
    from rest_framework_extensions.cache.mixins import CacheResponseMixin
    
    class GoodsListViewSet(CacheResponseMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
        """
        商品列表页, 分页, 搜索, 过滤, 排序
        """
        # 指定queryset
        queryset = Goods.objects.all()
    
        # 指定序列化类
        serializer_class = GoodsSerializer
    
        # 指定分页类
        pagination_class = GoodsPagination
    
        # 指定认证类
        # authentication_classes = [TokenAuthentication, ]
    
        # 添加过滤器 这里可以吧django-filter过滤器添加进来 和 rest_framework的filters添加进来一起用, 也可以单个用, 看你的需求
        filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]
    
        # 只需要简单的基于等同的过滤,则可以filter_fields在视图或视图集上设置属性,列出要过滤的字段集。
        # 等同就是根据你过滤的字段的数据必须跟数据库里那个字段的数据相同
        # filter_fields = ['name', 'shop_price']
    
        # 指定过滤器类
        filter_class = GoodsFilter
    
        # 指定搜索的字段
        search_fields = ['name', 'goods_brief', "goods_desc"]
    
        # 指定排序的字段
        ordering_fields = ["sold_num", "shop_price"]
    
        def retrieve(self, request, *args, **kwargs):
            # 重写retrieve, 更新商品的点击数
            instance = self.get_object()
            instance.click_num += 1
            instance.save()
            serializer = self.get_serializer(instance)
            return Response(serializer.data)
    
  • settings–设置缓存时间

    # drf缓存时间
    REST_FRAMEWORK_EXTENSIONS = {
        # 设置为5秒
        'DEFAULT_CACHE_RESPONSE_TIMEOUT': 5
    }
    
    # django-redis 使用redis做缓存
    # 配置redis缓存
    CACHES = {
        "default": {
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://127.0.0.1:6379/1",
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
            }
        }
    }
    
  • 效果图-缓存时间就是REST_FRAMEWORK_EXTENSIONS设置的缓存时间
    在这里插入图片描述

  • key是根据条件来生成的key, 具体怎么生成查看
    在这里插入图片描述
    drf-extensions官方文档:http://chibisov.github.io/drf-extensions/docs
    django-redis官方文档:http://django-redis-chs.readthedocs.io/zh_CN/latest/

posted on 2019-10-01 21:10  gmlgxx  阅读(120)  评论(0)    收藏  举报