Джанго.Обслуживание кэшированного контента только для анонимных - PullRequest
4 голосов
/ 02 апреля 2012

Я использую кеширование django (кеш на сайт с использованием промежуточного программного обеспечения) и хочу показывать кэшированные страницы только анонимным пользователям.

Я нашел вариант:

CACHE_MIDDLEWARE_ANONYMOUS_ONLY

и установите значение True.

В этом случае страница, созданная для зарегистрированного пользователя, не будет сохранена в кеше, а страницы, созданные для анонимного пользователя, сохранены в кэше и отправлены зарегистрированным пользователям.

Как заставить django не обслуживать кэшированный контент зарегистрированным пользователям? Я использую информацию для входа в систему на каждой странице (например: «привет, имя пользователя»), и когда анонимный пользователь запрашивает страницу, она кешируется, и поскольку вошедшие в систему пользователи получают: «Привет, аноним!»

Извините за мой плохой английский. Джон.

1 Ответ

5 голосов
/ 02 апреля 2012

Кажется, что вам нужны vary декораторы.Например, вы можете использовать этот код:

from django.views.decorators.vary import vary_on_headers

@vary_on_headers('Cookie')
def my_view(request):
    # do some stuff

или эквивалентно

from django.views.decorators.vary import vary_on_cookie

@vary_on_cookie
def my_view(request):
    # do some stuff

Ответ будет кэшироваться, если файлы cookie не изменятся (это происходит, например, когда пользователь входит в систему).Есть и другие интересные вещи, которые вы можете сделать с vary.См. эту статью или документацию для получения более подробной информации.

Вы также можете попробовать сделать это в пользовательском промежуточном программном обеспечении, чтобы вам не приходилось добавлять эти декораторы на каждомПосмотреть.Это можно сделать так:

from django.utils.cache import add_never_cache_headers

class DisableClientSideCachingMiddleware(object):
    def process_response(self, request, response):
        if request.user.is_authenticated():
            add_never_cache_headers(response)
        return response

Я позаимствовал код у здесь .Теперь вы только добавляете промежуточное программное обеспечение, и вам не нужно больше ни о чем беспокоиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...