Tidy up header usage

Explicity define request and response headers.
This commit is contained in:
George Hickman 2013-04-02 10:50:49 +01:00
parent 5e5de9c499
commit 70199d9755
3 changed files with 10 additions and 6 deletions

View File

@ -20,6 +20,7 @@ class ETagCacheLookup(BaseCacheLookup):
"""
"""
etag_variable = 'etag'
request_header = 'HTTP_IF_NONE_MATCH'
@staticmethod
def get_cache_key(cls, pk):
@ -32,19 +33,22 @@ class ETagCacheLookup(BaseCacheLookup):
def get_etag(self, obj):
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')
etag = self.get_etag(obj)
cache.set(key, etag)
return {'ETag': etag}
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
def resource_unchanged(self, request, 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:
return True
return False

View File

@ -105,7 +105,7 @@ class RetrieveModelMixin(object):
filtered_queryset = self.filter_queryset(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)
return Response(serializer.data, headers=headers)

View File

@ -307,10 +307,10 @@ class APIView(View):
if cache_lookup.resource_unchanged(request, cache_key):
return Response(status=304)
def get_cache_lookup_headers(self, obj):
def get_cache_lookup_response_headers(self, obj):
headers = {}
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
def check_update_validity(self, request):