add a middleware to handle http request for switch currently site

This commit is contained in:
xxc 2017-04-21 00:05:16 +08:00
parent 49fc6c47ff
commit eaf15b3a8a
4 changed files with 23 additions and 5 deletions

View file

@ -6,6 +6,7 @@ from django.template.loaders.base import Loader as BaseLoader
from dbtemplates.models import Template
from dbtemplates.utils.cache import (cache, get_cache_key,
set_and_return, get_cache_notfound_key)
from .middleware import get_request
class Loader(BaseLoader):
@ -38,7 +39,7 @@ class Loader(BaseLoader):
# * If all of the above steps have failed we generate a new key
# in the cache indicating that queries failed, with the current
# timestamp.
site = Site.objects.get_current()
site = Site.objects.get_current(get_request())
cache_key = get_cache_key(template_name)
if cache:
try:

17
dbtemplates/middleware.py Normal file
View file

@ -0,0 +1,17 @@
from django.utils.deprecation import MiddlewareMixin
_request = []
class RecordRequestMiddleware(MiddlewareMixin):
def process_request(self, request):
_request.append(request)
def process_response(self, request, response):
_request.pop()
return response
def get_request():
return _request[0]

View file

@ -10,7 +10,7 @@ from django.db.models import signals
from django.template import TemplateDoesNotExist
from django.utils.translation import ugettext_lazy as _
from django.utils.timezone import now
from .middleware import get_request
class Template(models.Model):
"""
@ -70,7 +70,7 @@ def add_default_site(instance, **kwargs):
"""
if not settings.DBTEMPLATES_ADD_DEFAULT_SITE:
return
current_site = Site.objects.get_current()
current_site = Site.objects.get_current(get_request())
if current_site not in instance.sites.all():
instance.sites.add(current_site)

View file

@ -3,7 +3,7 @@ from django.contrib.sites.models import Site
from django.template.defaultfilters import slugify
from dbtemplates.conf import settings
from ..middleware import get_request
def get_cache_backend():
"""
@ -21,7 +21,7 @@ cache = get_cache_backend()
def get_cache_key(name):
current_site = Site.objects.get_current()
current_site = Site.objects.get_current(get_request())
return 'dbtemplates::%s::%s' % (slugify(name), current_site.pk)