6

Wie würde ich Seiten für anonyme Benutzer im Cache speichern, aber für autorisierte Benutzer in Django 1.6 rendern? Früher gab es ein CACHE_MIDDLEWARE_ANONYMOUS_ONLY Flag, das perfekt klang, aber das wurde entfernt.Caching für anonyme Benutzer in Django

Ich frage, weil jede Seite eine Menüleiste hat, die den Namen des eingeloggten Benutzers und einen Link zu seinem/ihrem Profil anzeigt.

Was ist die richtige Weg dies zu tun? Muss ein häufiges Problem sein, aber ich habe nicht den richtigen Weg aus der Django-Dokumentation gefunden.

Antwort

2

dies keinen Code in einer Ansicht erfordert schreiben:

{% with cache_timeout=user.is_staff|yesno:"0,300" %} 
    {% cache cache_timeout cacheidentifier user.is_staff %} 
     your content here 
    {% endcache %} 
{% endwith %} 
0

Ich bin mir nicht sicher, ob dies der "richtige" Weg ist, dies zu erreichen, aber ich verwende das Schablonen-Tag {% cache%}, um dieses Problem zu umgehen. Der dynamische Benutzernamen Bit der Vorlage ist in meiner Basisvorlage und ich cachen, den Rest wie unten:

{% extends "base.html" %} 
{% load cache %} 

{% block content %} 
{% cache 86400 key-name %} 
<h1>My Template in here</h1> 
{% endcache %} 
{% endblock content %} 

Durch einen ‚Schlüssel-name‘ spezifizieren Sie können dann die unten in einer Ansicht verwenden Sie den Cache zu löschen, wenn Sie müssen manuell aktualisieren:

key = django.core.cache.utils.make_template_fragment_key('key-name') 
cache.delete(key) 
1

context = { "cache_timeout": 300, wenn request.user.is_anonymous() else 0}

{% Last Cache%}
{% Cache cache_timeout „my -cache-fragment "%}
Ich habe dies nur einmal
{% endCache%}

-1

Sie den folgenden Ansatz verwenden, durch die Schaffung eines Dekorateur kann:

def cache_for_anonim(timeout): 
    def decorator(view_func): 
     @wraps(view_func, assigned=available_attrs(view_func)) 
     def _wrapped_view(request, *args, **kwargs): 

      if request.user.is_authenticated(): 
       return (view_func)(request, *args, **kwargs) 
      else: 
       return cache_page(timeout)(view_func)(request, *args, **kwargs) 
     return _wrapped_view 
    return decorator 

dann in Ihre Urls:

url(r'^$', cache_for_anonim(3600)(MyView.as_view())), 

Quelle: http://codeinpython.blogspot.com/2017/01/caching-for-anonymous-non-authenticated.html

+0

dies funktioniert nicht für mich – anyavacy

Verwandte Themen