看來,你需要的是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
的響應將被緩存,除非餅乾改變(這種情況發生時,例如在用戶logges)。還有其他有趣的事情可以用vary
做。有關更多詳細信息,請參閱this article或the documentation。
您也可以嘗試在自定義中間件中執行此操作,以便您不必在每個視圖中添加這些裝飾器。這可以這樣做:
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
我借用了here的代碼。現在您只需添加中間件,而不必擔心其他任何問題。