tôi đã gãi đầu của tôi khi ba kỳ diệu meta
đã không làm việc trong Firefox và Safari.
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
Dường như điều này có thể xảy ra vì một số trình duyệt sẽ bỏ qua phía máy khách meta
, vì vậy nó sẽ được xử lý ở phía máy chủ.
Tôi đã thử tất cả các câu trả lời từ bài đăng này cho chế độ xem dựa trên lớp học của tôi (django==1.11.6
). Nhưng đề cập đến câu trả lời từ @Lorenzo và @Zags, tôi quyết định viết một phần mềm trung gian mà tôi nghĩ là một phần mềm đơn giản.
Vì vậy, thêm vào câu trả lời tốt khác,
# middleware.py
class DisableBrowserCacheMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
response['Pragma'] = 'no-cache'
response['Cache-Control'] = 'no-cache, no-store, must-revalidate'
response['Expires'] = '0'
return response
# settings.py
MIDDLEWARE = [
'myapp.middleware.DisableBrowserCacheMiddleware',
...
Để thực hiện việc này trên tất cả các trình duyệt (đặc biệt FireFox và Opera, nó hoạt động tốt trên trình duyệt IE và Safari/Chrome) tôi cần phải tự thêm 'phản ứng [ "Cache -Kiểm soát "] =" không có bộ nhớ cache, không lưu trữ, phải xác nhận lại "' cùng với '@ never_cache'. '@ never_cache' gọi' add_never_cache_headers() 'và điều này lần lượt gọi' patch_cache_control() 'nhưng điều này chỉ thêm' Cache-Control: max-age = 0', mà dường như không đủ cho các trình duyệt này. Xem http://stackoverflow.com/questions/49547/making-sure-a-web-page-is-not-cached-across-all-browsers – AJJ
Sau khi khám phá mã django nhiều hơn một chút, tôi đã tìm thấy một cách sạch hơn để thêm tiêu đề đó: 'patch_cache_control (phản hồi, no_cache = True, no_store = True, must_revalidate = True)' – AJJ
Ah, đã có một vé mở cho điều này tại code.djangoproject.com: [@never_cache decorator nên thêm 'no-cache '&' must-revalidate '] (https://code.djangoproject.com/ticket/13008) – AJJ