# class BannerView(GenericAPIView,ListModelMixin): # 继承这两个类的路由是path('banner/',views.BannerView.as_view()),
class BannerView(GenericViewSet,ListModelMixin): # 继承这两个类的路由是path('',include(router.urls)),自动分发路由
# [: settings.BANNER_COUNTER]这个的作用是切片,限制轮播图片显示给前端的数量
queryset = models.Banner.objects.filter(is_delete=False,is_show=True).order_by('display_order')[:settings.BANNER_COUNTER]
serializer_class = serializers.BannerModelserialize
# 我们需要将轮播图缓存到redis数据库中,以便后续请求时不在向mysql数据库发请求,这样在高并发的时候会快很多
# 重写ListModelMixin的list方法
def list(self, request, *args, **kwargs):
# 先获取一个redis缓存中是否有轮播图数据,没有在往数据库发送请求
banner_list = cache.get('banner_list')
if not banner_list:
# print('走数据库了')
response = super().list(request, *args, **kwargs)
# 往缓存中存一下
cache.set('banner_list',response.data,60*60*24)
return response
else:
return Response(data=banner_list)
标签:缓存,轮播,redis,list,BannerView,banner
From: https://www.cnblogs.com/suncolor/p/16858665.html