私の訪問者は、Varnish からページのキャッシュ バージョンを取得します。管理者ユーザーがページの現在のバージョンを常に表示できるようにしたいと考えています。このようにして、すべての変更が直接表示されます。
そのようなものは存在しますか?私は@never_cache
デコレータを知っています。ユーザーがログインしていない場合にのみ、そのようなものを探しています。
Django-CMS で動作する場合はボーナス ポイント!
私の訪問者は、Varnish からページのキャッシュ バージョンを取得します。管理者ユーザーがページの現在のバージョンを常に表示できるようにしたいと考えています。このようにして、すべての変更が直接表示されます。
そのようなものは存在しますか?私は@never_cache
デコレータを知っています。ユーザーがログインしていない場合にのみ、そのようなものを探しています。
Django-CMS で動作する場合はボーナス ポイント!
キャッシュ デコレータを使用していると仮定しました。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):
(...)
次のようなものがあることがわかりました。
CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
ユーザーとスタッフの区別がなければ、ほとんどの Web サイトで機能するはずです。
スタッフ メンバーにヘッダーを明示的に送信するためにCache-Control
、いくつかのミドルウェアを作成できます (これもCookie
残念ながらヘッダーによって異なります)。