【问题标题】:How to cache Django rest framework generics.ListAPIView response如何缓存 Django rest framework generics.ListAPIView 响应
【发布时间】:2021-04-15 06:18:04
【问题描述】:

models.py

class PaymentMode(models.Model):
    name = models.CharField(max_length=20)
    icon = models.CharField(max_length=350, default='', null=True)

serializer.py

class PaymentModeSerializer(serializers.ModelSerializer):
    class Meta:
        model = PaymentMode
        fields ='__all__'

Views.py


class PaymentModesList(generics.ListAPIView):
    queryset = PaymentMode.objects.all()
    serializer_class = PaymentModeSerializer

URL to DRFcaching documentation

有人可以帮助我了解如何缓存此响应而不进行查询,因为我认为此响应在绝大多数时间对所有用户都是相同的。

【问题讨论】:

    标签: python-3.x django caching django-rest-framework django-views


    【解决方案1】:

    通过查看您提供的文档,您似乎唯一需要的是覆盖generics.ListAPIView 使用的方法,即get() method。检查下面的代码。

    您还可以更改通过的缓存超时,以便更好地了解它的行为检查the docs

    from django.utils.decorators import method_decorator
    from django.views.decorators.cache import cache_page
    
    class PaymentModesList(generics.ListAPIView):
        queryset = PaymentMode.objects.all()
        serializer_class = PaymentModeSerializer
    
        # Cache page for the requested url
        @method_decorator(cache_page(60*60*2))
        def get(self, *args, **kwargs):
            return super().get(*args, **kwargs)
    

    【讨论】:

    • 谢谢你。这个解决方案似乎有效,必须测试性能,我正在想办法做到这一点。任何建议
    • @Akashgkrishnan 太好了!很高兴听到它有帮助!如果它解决了您的问题,请不要忘记标记为答案;D
    • @Akashgkrishnan 我不习惯测试缓存解决方案,但我认为this link 可能会对您有所帮助。
    猜你喜欢
    • 2021-11-08
    • 2016-11-14
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    • 2018-12-08
    • 2016-11-04
    • 2018-10-10
    相关资源
    最近更新 更多