mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-29 17:39:48 +03:00
Tidy up header usage
Explicity define request and response headers.
This commit is contained in:
parent
5e5de9c499
commit
70199d9755
|
@ -20,6 +20,7 @@ class ETagCacheLookup(BaseCacheLookup):
|
||||||
"""
|
"""
|
||||||
"""
|
"""
|
||||||
etag_variable = 'etag'
|
etag_variable = 'etag'
|
||||||
|
request_header = 'HTTP_IF_NONE_MATCH'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_cache_key(cls, pk):
|
def get_cache_key(cls, pk):
|
||||||
|
@ -32,19 +33,22 @@ class ETagCacheLookup(BaseCacheLookup):
|
||||||
def get_etag(self, obj):
|
def get_etag(self, obj):
|
||||||
return getattr(obj, self.etag_variable)
|
return getattr(obj, self.etag_variable)
|
||||||
|
|
||||||
def get_header(self, obj):
|
def get_request_header(self):
|
||||||
|
return self.request_header
|
||||||
|
|
||||||
|
def get_response_header(self, obj):
|
||||||
key = self.get_cache_key(obj, 'pk')
|
key = self.get_cache_key(obj, 'pk')
|
||||||
etag = self.get_etag(obj)
|
etag = self.get_etag(obj)
|
||||||
cache.set(key, etag)
|
cache.set(key, etag)
|
||||||
return {'ETag': etag}
|
return {'ETag': etag}
|
||||||
|
|
||||||
def precondition_check(self, obj, request):
|
def precondition_check(self, obj, request):
|
||||||
if self.get_etag(obj) != request.META.get('HTTP_IF_NONE_MATCH'):
|
if self.get_etag(obj) != request.META.get(self.get_request_header()):
|
||||||
raise PreconditionFailed
|
raise PreconditionFailed
|
||||||
|
|
||||||
def resource_unchanged(self, request, key):
|
def resource_unchanged(self, request, key):
|
||||||
etag = cache.get(key)
|
etag = cache.get(key)
|
||||||
header = request.META.get('HTTP_IF_NONE_MATCH')
|
header = request.META.get(self.get_request_header())
|
||||||
if etag is not None and etag == header:
|
if etag is not None and etag == header:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
|
@ -105,7 +105,7 @@ class RetrieveModelMixin(object):
|
||||||
filtered_queryset = self.filter_queryset(queryset)
|
filtered_queryset = self.filter_queryset(queryset)
|
||||||
self.object = self.get_object(filtered_queryset)
|
self.object = self.get_object(filtered_queryset)
|
||||||
|
|
||||||
headers = self.get_cache_lookup_headers(self.object)
|
headers = self.get_cache_lookup_response_headers(self.object)
|
||||||
|
|
||||||
serializer = self.get_serializer(self.object)
|
serializer = self.get_serializer(self.object)
|
||||||
return Response(serializer.data, headers=headers)
|
return Response(serializer.data, headers=headers)
|
||||||
|
|
|
@ -307,10 +307,10 @@ class APIView(View):
|
||||||
if cache_lookup.resource_unchanged(request, cache_key):
|
if cache_lookup.resource_unchanged(request, cache_key):
|
||||||
return Response(status=304)
|
return Response(status=304)
|
||||||
|
|
||||||
def get_cache_lookup_headers(self, obj):
|
def get_cache_lookup_response_headers(self, obj):
|
||||||
headers = {}
|
headers = {}
|
||||||
for cache_lookup in self.get_cache_lookups():
|
for cache_lookup in self.get_cache_lookups():
|
||||||
headers.update(cache_lookup.get_header(obj))
|
headers.update(cache_lookup.get_response_header(obj))
|
||||||
return headers
|
return headers
|
||||||
|
|
||||||
def check_update_validity(self, request):
|
def check_update_validity(self, request):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user