I am trying to make a multi tenant website. For example a.com and b.com websites runs same home.html but it's values changes by it's domain name. But my middleware doesn't caches sometimes.
I added my cache_tenant_mw.py and redis in settings.py
MIDDLEWARE = [
...
'rhsuite.cache_middleware.cache_tenant_mw',
]
CACHES = {
"default": {
"BACKEND": "django.core.cache.backends.redis.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
}
}
and added the code which caches tenant values in cache_tenant_mw.py
from rhsuite.models import Tenants, Themes, Settings, Metas, Languages
from django.shortcuts import get_object_or_404
from django.core.cache import cache
from rhsuite.helpers.utils import get_metas
def cache_tenant_mw(get_response):
def middleware(request):
response = get_response(request)
def get_hostname(request):
host = request.get_host().split('.')
popped = host.pop()
joined = ".".join(host)
return joined
def get_tenant(request):
hostname = get_hostname(request)
tenant_obj = get_object_or_404(Tenants, name=hostname)
# get metas and languages
tenant_obj.metas = get_metas(Metas.objects.filter(meta_able_type="tenants", meta_able_id=tenant_obj.id))
tenant_obj.languages = Languages.objects.filter(id__in=list(tenant_obj.metas['languages'].values()))
# cache tenant
cache_key = "tenant"
cache.set(cache_key, tenant_obj)
cached_tenant = cache.get('tenant')
# cache tenant settings
settings_obj = Settings.objects.filter(tenant_id=tenant_obj.id)
settings_key = "settings"
cache.set(settings_key, settings_obj)
# cache theme
theme_obj = Themes.objects.get(tenant_id=cached_tenant.id)
theme_key = "theme"
cache.set(theme_key, theme_obj)
return True
get_tenant(request)
return response
return middleware
How can i make it able to make my middleware cache every page everytime?