Django custom middleware doesn't caches sometime

23 Views Asked by At

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?

first landing to page after refreshing

0

There are 0 best solutions below