2009-10-22 12 views
5

मैंने हाल ही में अपने डीजेंगो एप्लिकेशन पर memcached का उपयोग कर साइटवाइड कैशिंग लागू की है, मैंने TTL को लगभग 500 सेकंड में सेट किया है, और अन्य हिस्सों पर प्रति दृश्य कैश लागू किया है वेब अनुप्रयोग।Django के साथ साइट विस्तृत कैशिंग - लॉगआउट पर पासवर्ड संरक्षित पृष्ठों के साथ समस्याएं

मेरी समस्या यह है कि जब कोई उपयोगकर्ता लॉग आउट करता है, क्योंकि यह साइट के रूप में अपेक्षित व्यवहार के रूप में एक फॉर्म है, हालांकि यदि वे साइट के पासवर्ड संरक्षित हिस्से में जाते हैं, तो एप्लिकेशन व्यवहार करता है जैसे कि वे अभी भी लॉग इन हैं में, जब तक वे "ताज़ा" हिट नहीं करते हैं। मैं कैशिंग करने के लिए नया हूं, और सोच रहा हूं कि क्या मैं इसे रोकने के लिए कुछ भी स्मार्ट कर सकता हूं?

उत्तर

7

मैं इसी तरह के मुद्दों में भाग गया। मानक Django तरीका प्रमाणीकृत उपयोगकर्ताओं के लिए कैश अक्षम करना है।

#settings.py 
CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True 

अलग उपयोगकर्ता अलग पृष्ठों (उदाहरण: उन पर उनकी उपयोगकर्ता नाम) यदि यह ठीक काम करता है और आप उनके लिए एक संस्करण नहीं हो सकता।

लेकिन यदि पृष्ठ के केवल 2 संस्करण हैं: प्रमाणीकृत उपयोगकर्ताओं के लिए और दूसरों के लिए, तो प्रमाणित उपयोगकर्ताओं के लिए कैश को पूरी तरह से अक्षम करना अच्छा नहीं है। मैंने app लिखा है कि, इसके अलावा, इस मामले में कैश को ठीक-ठीक करना संभव बनाता है।

अद्यतन।

बीटीडब्लू: आपने उल्लेख किया है कि जब आप पृष्ठ के सही संस्करण को 'रीफ्रेश' पर क्लिक करते हैं तो प्राप्त होता है। इसका मतलब है कि समस्या क्लाइंट-साइड कैश है (हेडर या ई-टैग समाप्त हो जाती है), सर्वर कैश नहीं।

क्लाइंट-साइड कैशिंग को रोकने के लिए (आपको ऐसा करना होगा यदि आपके पास एक ही यूआरएल के तहत पेज के कई संस्करण हैं) @cache_control(must_revalidate=True) सजावट का उपयोग करें।

+0

जिज्ञासा से, क्या आपका ऐप काम करता है यदि मेरे पास दो से अधिक संस्करण हैं? (बेनामी, प्रमाणीकृत, कर्मचारी)? – Powerlord

+0

हां। इसका उपयोग अनुरोध में किसी भी चीज़ के आधार पर पृष्ठों के विभिन्न संस्करणों के लिए किया जा सकता है। इसका अर्थ यह है कि आपके पास उपयोगकर्ता द्वारा विशेषता या कुकीज़ द्वारा कैश किए गए पृष्ठों द्वारा कैश किए गए प्रति-उपयोगकर्ता कैश किए गए पृष्ठ या पृष्ठ हो सकते हैं। –

+0

.. या पैरामीटर –

1

साइट के पासवर्ड संरक्षित हिस्से के दृश्य में, क्या आप डेटा जांचने से पहले उपयोगकर्ता को पंजीकृत या अज्ञात है (और शायद कैश से डेटा ला रहा है)?

आपको करना चाहिए। Django आपको एक लॉगिन आवश्यक सजावट के साथ मदद करता है जिसे आप दृश्य में रख सकते हैं। इस पर एक नज़र डालें: http://docs.djangoproject.com/en/dev/topics/auth/#the-login-required-decorator

+0

हाँ मैं ऐसा करता हूं, सब कुछ एक लॉगिन आवश्यक सजावट है, समस्या यह है कि लॉगिन स्थिति कैश की जाती है। –

+0

लेकिन अगर आप "ताज़ा करें" दबाते हैं तो यह स्पष्ट हो जाता है। –

संबंधित मुद्दे