@@ -13,22 +13,21 @@ provided in Django.
13
13
14
14
Django provides a [ ` method_decorator ` ] [ decorator ] to use
15
15
decorators with class based views. This can be used with
16
- other cache decorators such as [ ` cache_page ` ] [ page ] and
17
- [ ` vary_on_cookie ` ] [ cookie ] .
16
+ other cache decorators such as [ ` cache_page ` ] [ page ] ,
17
+ [ ` vary_on_cookie ` ] [ cookie ] and [ ` vary_on_headers ` ] [ headers ] .
18
18
19
19
``` python
20
20
from django.utils.decorators import method_decorator
21
21
from django.views.decorators.cache import cache_page
22
- from django.views.decorators.vary import vary_on_cookie
22
+ from django.views.decorators.vary import vary_on_cookie, vary_on_headers
23
23
24
24
from rest_framework.response import Response
25
25
from rest_framework.views import APIView
26
26
from rest_framework import viewsets
27
27
28
28
29
29
class UserViewSet (viewsets .ViewSet ):
30
-
31
- # Cache requested url for each user for 2 hours
30
+ # With cookie: cache requested url for each user for 2 hours
32
31
@method_decorator (cache_page(60 * 60 * 2 ))
33
32
@method_decorator (vary_on_cookie)
34
33
def list (self , request , format = None ):
@@ -38,8 +37,18 @@ class UserViewSet(viewsets.ViewSet):
38
37
return Response(content)
39
38
40
39
41
- class PostView (APIView ):
40
+ class ProfileView (APIView ):
41
+ # With auth: cache requested url for each user for 2 hours
42
+ @method_decorator (cache_page(60 * 60 * 2 ))
43
+ @method_decorator (vary_on_headers(" Authorization" ,))
44
+ def get (self , request , format = None ):
45
+ content = {
46
+ ' user_feed' : request.user.get_user_feed()
47
+ }
48
+ return Response(content)
42
49
50
+
51
+ class PostView (APIView ):
43
52
# Cache page for the requested url
44
53
@method_decorator (cache_page(60 * 60 * 2 ))
45
54
def get (self , request , format = None ):
@@ -55,4 +64,5 @@ class PostView(APIView):
55
64
56
65
[ page ] : https://docs.djangoproject.com/en/dev/topics/cache/#the-per-view-cache
57
66
[ cookie ] : https://docs.djangoproject.com/en/dev/topics/http/decorators/#django.views.decorators.vary.vary_on_cookie
67
+ [ headers ] : https://docs.djangoproject.com/en/dev/topics/http/decorators/#django.views.decorators.vary.vary_on_headers
58
68
[ decorator ] : https://docs.djangoproject.com/en/dev/topics/class-based-views/intro/#decorating-the-class
0 commit comments