mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-29 01:20:02 +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'
|
||||
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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue
Block a user