2015-02-20 17 views
5

का उपयोग करके किसी विशिष्ट पृष्ठ पर कैश को अक्षम करें मेरे पास एक टेम्पलेट है जिसमें लेखक विभिन्न प्रविष्टियां दिखा रहे हैं जिन्हें लेखक संपादित/हटा सकते हैं। उपयोगकर्ता हटाएंफ्लास्क

हटाए जाने के बाद उपयोगकर्ता प्रविष्टियों पृष्ठ पर रीडायरेक्ट हो जाते हैं, लेकिन आइटम अभी भी वहां है, और हटाए जाने वाले प्रभाव को दिखाने के लिए पृष्ठ को दोबारा लोड करने की आवश्यकता है। तो मैं कैशिंग समस्या गायब हो जाता है, अक्षम, लेकिन मैं वास्तव में अन्य सभी पृष्ठों में कैश करना चाहते हैं ...

इन टैग जोड़ने काम नहीं किया, मैं अपने ब्राउज़र सिर्फ उन्हें

<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" /> 

पर ध्यान नहीं देता लगता है मैं कैश टफ को सक्षम कर रहा हूं:

@app.after_request 
def add_header(response):  
response.headers['X-UA-Compatible'] = 'IE=Edge,chrome=1' 
response.headers['Cache-Control'] = 'public, max-age=600' 
return response 

क्या कोई तरीका है कि मैं इसे किसी विशिष्ट पृष्ठ के लिए अक्षम कर सकता हूं?

संपादित

के रूप में सुझाव मैं एक आवरण उपयोग करने की कोशिश:

def no_cache(f): 
    def new_func(*args, **kwargs): 
     resp = make_response(f(*args, **kwargs)) 
     resp.cache_control.no_cache = True 
     return resp 
    return update_wrapper(new_func, f) 

और पेज मैं एक @no_cache डेकोरेटर में कैश wihtout चाहते लपेट, फिर भी प्रयास विफल था ...

उत्तर

5

@app.after_request 
def add_header(response):  
    response.headers['X-UA-Compatible'] = 'IE=Edge,chrome=1' 
    if ('Cache-Control' not in response.headers): 
    response.headers['Cache-Control'] = 'public, max-age=600' 
    return response 
:

आप केवल अगर वहाँ किसी विशिष्ट पृष्ठ की ऐसी कोई हेडर हैं कैश नियंत्रण हेडर जोड़ने की कोशिश कर सकते हैं

और अपने पृष्ठ कोड में - केवल उन्हीं जहां कैश स्पष्ट रूप से बंद कर दिया नहीं है के लिए - उदा .:

@app.route('/page_without_cache') 
def page_without_cache(): 
    response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate' 
    response.headers['Pragma'] = 'no-cache' 
    return 'hello' 

मुद्दा यह है कि आप सभी पृष्ठों के लिए @app.after_request में अपने हेडर पर हावी नहीं होना चाहिए। उनका कहना है कि मैं कैश नियंत्रण हेडर नहीं जोड़ सकते हैं के लिए

@app.route('/page_without_cache') 
@no_cache 
def page_without_cache(): 
    return 'hello' 
+1

धन्यवाद: ताकि आप इसे ऐसे ही उपयोग कर सकते हैं -

इसके अलावा, आप इस तरह के @no_cache के रूप में एक आवरण के लिए शीर्षलेख जोड़कर कोड स्थानांतरित करने के लिए चाहते हो सकता है अगर वे पहले से ही हैं, तो मैंने इसके बारे में नहीं सोचा था ... मैंने सुझाव दिया है कि आपने सुझाव दिया है, एक रैपर के साथ प्रयास कर रहा है और केवल प्रतिक्रिया शीर्षलेख जोड़ने की कोशिश कर रहा है, लेकिन कैश अभी भी किसी कारण से है ... –

+0

@ लुकाब्रोज़ी, कृपया जांचें कि आप क्रोम/मोज़िला देव उपकरण में हेडर प्राप्त कर रहे हैं। उदाहरण देखें यह SO उत्तर अगर आपको नहीं पता कि यह कैसे करें: http://stackoverflow.com/questions/4423061/view-http-headers-in-google-chrome। यदि आप स्पष्ट रूप से देखते हैं कि 'कैश-कंट्रोल: नो-कैश' हेडर नहीं है, तो यह अभी भी आपके '@ app.after_request' हैंडलर में ओवरड्रिड हेडर के साथ एक समस्या है। – NikitaBaksalyar

+0

नहीं मैं एक लाइन बदलने के लिए भूल गया था, आपका समाधान सही था, बहुत बहुत धन्यवाद –