forked from CGM_Public/pretix_original
Use more caching in multidomain module
This commit is contained in:
@@ -33,7 +33,7 @@ class PermissionMiddleware(MiddlewareMixin):
|
|||||||
if not request.path.startswith(get_script_prefix() + 'control'):
|
if not request.path.startswith(get_script_prefix() + 'control'):
|
||||||
# This middleware should only touch the /control subpath
|
# This middleware should only touch the /control subpath
|
||||||
return
|
return
|
||||||
if hasattr(request, 'domain'):
|
if hasattr(request, 'organizer'):
|
||||||
# If the user is on a organizer's subdomain, he should be redirected to pretix
|
# If the user is on a organizer's subdomain, he should be redirected to pretix
|
||||||
return redirect(urljoin(settings.SITE_URL, request.get_full_path()))
|
return redirect(urljoin(settings.SITE_URL, request.get_full_path()))
|
||||||
if url_name in self.EXCEPTIONS:
|
if url_name in self.EXCEPTIONS:
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ from urllib.parse import urlparse
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.sessions.middleware import \
|
from django.contrib.sessions.middleware import \
|
||||||
SessionMiddleware as BaseSessionMiddleware
|
SessionMiddleware as BaseSessionMiddleware
|
||||||
|
from django.core.cache import cache
|
||||||
from django.core.exceptions import DisallowedHost
|
from django.core.exceptions import DisallowedHost
|
||||||
from django.core.urlresolvers import set_urlconf
|
from django.core.urlresolvers import set_urlconf
|
||||||
from django.http.request import split_domain_port
|
from django.http.request import split_domain_port
|
||||||
@@ -12,6 +13,7 @@ from django.utils.cache import patch_vary_headers
|
|||||||
from django.utils.deprecation import MiddlewareMixin
|
from django.utils.deprecation import MiddlewareMixin
|
||||||
from django.utils.http import cookie_date
|
from django.utils.http import cookie_date
|
||||||
|
|
||||||
|
from pretix.base.models import Organizer
|
||||||
from pretix.multidomain.models import KnownDomain
|
from pretix.multidomain.models import KnownDomain
|
||||||
|
|
||||||
LOCAL_HOST_NAMES = ('testserver', 'localhost')
|
LOCAL_HOST_NAMES = ('testserver', 'localhost')
|
||||||
@@ -36,17 +38,26 @@ class MultiDomainMiddleware(MiddlewareMixin):
|
|||||||
if domain:
|
if domain:
|
||||||
request.host = domain
|
request.host = domain
|
||||||
request.port = int(port) if port else None
|
request.port = int(port) if port else None
|
||||||
try:
|
|
||||||
kd = KnownDomain.objects.get(domainname=domain) # noqa
|
orga = cache.get('pretix_multidomain_organizer_{}'.format(domain))
|
||||||
request.domain = kd
|
if orga is None:
|
||||||
except:
|
try:
|
||||||
|
kd = KnownDomain.objects.select_related('organizer').get(domainname=domain) # noqa
|
||||||
|
orga = kd.organizer
|
||||||
|
except KnownDomain.DoesNotExist:
|
||||||
|
orga = False
|
||||||
|
cache.set('pretix_multidomain_organizer_{}'.format(domain), orga.pk if orga else False, 3600)
|
||||||
|
|
||||||
|
if orga:
|
||||||
|
print(orga)
|
||||||
|
request.organizer = orga if isinstance(orga, Organizer) else Organizer.objects.get(pk=orga)
|
||||||
|
request.urlconf = "pretix.multidomain.subdomain_urlconf"
|
||||||
|
else:
|
||||||
if settings.DEBUG or domain in LOCAL_HOST_NAMES or domain == default_domain:
|
if settings.DEBUG or domain in LOCAL_HOST_NAMES or domain == default_domain:
|
||||||
request.urlconf = "pretix.multidomain.maindomain_urlconf"
|
request.urlconf = "pretix.multidomain.maindomain_urlconf"
|
||||||
else:
|
else:
|
||||||
raise DisallowedHost("Unknown host: %r" % host)
|
raise DisallowedHost("Unknown host: %r" % host)
|
||||||
else:
|
|
||||||
request.organizer = kd.organizer
|
|
||||||
request.urlconf = "pretix.multidomain.subdomain_urlconf"
|
|
||||||
else:
|
else:
|
||||||
raise DisallowedHost("Invalid HTTP_HOST header: %r." % host)
|
raise DisallowedHost("Invalid HTTP_HOST header: %r." % host)
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
from django.core.cache import cache
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
@@ -19,8 +20,10 @@ class KnownDomain(models.Model):
|
|||||||
super().save(*args, **kwargs)
|
super().save(*args, **kwargs)
|
||||||
if self.organizer:
|
if self.organizer:
|
||||||
self.organizer.get_cache().clear()
|
self.organizer.get_cache().clear()
|
||||||
|
cache.delete('pretix_multidomain_organizer_{}'.format(self.domainname))
|
||||||
|
|
||||||
def delete(self, *args, **kwargs):
|
def delete(self, *args, **kwargs):
|
||||||
if self.organizer:
|
if self.organizer:
|
||||||
self.organizer.get_cache().clear()
|
self.organizer.get_cache().clear()
|
||||||
|
cache.delete('pretix_multidomain_organizer_{}'.format(self.domainname))
|
||||||
super().delete(*args, **kwargs)
|
super().delete(*args, **kwargs)
|
||||||
|
|||||||
@@ -23,13 +23,12 @@ def _detect_event(request):
|
|||||||
path = "/" + request.get_full_path().split("/", 2)[-1]
|
path = "/" + request.get_full_path().split("/", 2)[-1]
|
||||||
return redirect(path)
|
return redirect(path)
|
||||||
|
|
||||||
request.event = Event.objects\
|
request.event = request.organizer.events\
|
||||||
.select_related('organizer')\
|
|
||||||
.get(
|
.get(
|
||||||
slug=url.kwargs['event'],
|
slug=url.kwargs['event'],
|
||||||
organizer=request.organizer,
|
organizer=request.organizer,
|
||||||
)
|
)
|
||||||
request.organizer = request.event.organizer
|
request.organizer = request.organizer
|
||||||
else:
|
else:
|
||||||
# We are on our main domain
|
# We are on our main domain
|
||||||
if 'event' in url.kwargs and 'organizer' in url.kwargs:
|
if 'event' in url.kwargs and 'organizer' in url.kwargs:
|
||||||
|
|||||||
Reference in New Issue
Block a user