4

私の訪問者は、Varnish からページのキャッシュ バージョンを取得します。管理者ユーザーがページの現在のバージョンを常に表示できるようにしたいと考えています。このようにして、すべての変更が直接表示されます。

そのようなものは存在しますか?私は@never_cacheデコレータを知っています。ユーザーがログインしていない場合にのみ、そのようなものを探しています。

Django-CMS で動作する場合はボーナス ポイント!

4

3 に答える 3

10

キャッシュ デコレータを使用していると仮定しました。cache_page以下のコードは、ユーザーが管理者でない場合にのみ、別のデコレーター (つまり ) で装飾されたビューを返すデコレーターです。したがって、管理者は常に装飾されていない (キャッシュされていない) ページを取得し、他のユーザーは装飾されている (キャッシュされている可能性がある) ページを取得します。可能なすべてのデコレーターで動作します ( だけでなくcache_page)。

def conditional_cache(decorator):
    """ Returns decorated view if user is not admin. Un-decorated otherwise """

    def _decorator(view):

        decorated_view = decorator(view)  # This holds the view with cache decorator

        def _view(request, *args, **kwargs):

            if request.user.is_staff:     # If user is staff
                return view(request, *args, **kwargs)  # view without @cache
            else:
                return decorated_view(request, *args, **kwargs) # view with @cache

        return _view

    return _decorator

典型的な構文の代わりにそれを使用するには:

@cache_page(123)
def testview(request):
    (...)

使用する:

@conditional_cache(decorator=cache_page(123))  # The argument is what you usually do with views, but without the @
def testview(request):
    (...)
于 2012-02-21T12:49:15.410 に答える
1

次のようなものがあることがわかりました。

CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True

ユーザーとスタッフの区別がなければ、ほとんどの Web サイトで機能するはずです。

スタッフ メンバーにヘッダーを明示的に送信するためにCache-Control、いくつかのミドルウェアを作成できます (これもCookie残念ながらヘッダーによって異なります)。

于 2012-02-22T10:41:59.590 に答える