You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.5 KiB
50 lines
1.5 KiB
# -*- coding: utf-8 -*-
|
|
import random
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.utils.cache import patch_response_headers
|
|
from django.utils.decorators import method_decorator
|
|
from django.views.decorators.cache import cache_page, never_cache
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
|
|
class NeverCacheMixin(object):
|
|
@method_decorator(never_cache)
|
|
def dispatch(self, *args, **kwargs):
|
|
return super(NeverCacheMixin, self).dispatch(*args, **kwargs)
|
|
|
|
|
|
class LoginRequiredMixin(object):
|
|
@method_decorator(login_required)
|
|
def dispatch(self, *args, **kwargs):
|
|
return super(LoginRequiredMixin, self).dispatch(*args, **kwargs)
|
|
|
|
|
|
class CacheMixin(object):
|
|
cache_timeout = 60
|
|
|
|
def get_cache_timeout(self):
|
|
return self.cache_timeout
|
|
|
|
def dispatch(self, *args, **kwargs):
|
|
return cache_page(self.get_cache_timeout())(super(CacheMixin, self).dispatch)(*args, **kwargs)
|
|
|
|
|
|
class CacheControlMixin(object):
|
|
cache_timeout = 60
|
|
|
|
def get_cache_timeout(self):
|
|
return self.cache_timeout
|
|
|
|
def dispatch(self, *args, **kwargs):
|
|
response = super(CacheControlMixin, self).dispatch(*args, **kwargs)
|
|
patch_response_headers(response, self.get_cache_timeout())
|
|
return response
|
|
|
|
|
|
class JitterCacheMixin(CacheControlMixin):
|
|
cache_range = [60, 120]
|
|
|
|
def get_cache_range(self):
|
|
return self.cache_range
|
|
|
|
def get_cache_timeout(self):
|
|
return random.randint(*self.get_cache_range()) |