如何在Django Rest Framework ViewSet中使用Last-Modified标头?

时间:2019-03-18 12:26:50

标签: python django django-rest-framework

假设我遵循了Django Rest Framework的ViewSet:

from django.contrib.auth import get_user_model
from rest_framework.viewsets import ViewSet
from rest_framework.response import Response


class SubscriptionViewSet(ViewSet):
    def list(self, request):
        data = {'user_count': get_user_model().objects.count()}
        return Response(data)

如何与Django的last_modified装饰器一起使用?还是如何实现这种功能?

2 个答案:

答案 0 :(得分:0)

@jozo,

您可以检查https://github.com/jatir/django-rest-framework-last-modified django应用程序以使用上次修改的

编辑:

您可以在测试目录中查看示例 https://github.com/jatir/django-rest-framework-last-modified/blob/master/tests/views.py#L14

答案 1 :(得分:0)

我检查了@Makarand Bauskar提到的包裹。但是我不满意。它不是活动的,它使用自定义方式处理/修改Last-Modified标头。因此,我决定创建新的软件包django-rest-framework-condition,该软件包可以执行以下操作:

  1. 重复使用Django中的实现
    • 它将从Django获取修复程序
    • 您可以按照Django docs
    • 中所述的相同方式使用它
  2. 同时提供@last_modified和@etag装饰器

要安装它:

pip install django-rest-framework-condition

用法:

from django.contrib.auth import get_user_model
from rest_framework.viewsets import ViewSet
from rest_framework.response import Response
from rest_framework_condition import last_modified


def my_last_modified(request, *args, **kwargs):
    return datetime(2019, 1, 1)


class SubscriptionViewSet(ViewSet):
    @last_modified(my_last_modified)
    def list(self, request):
        data = {'user_count': get_user_model().objects.count()}
        return Response(data)