2015-02-20 11 views
5

Mam szablon pokazujący różne wpisy, które autor może edytować/usunąć. Użytkownicy mogą usuwać swoje posty, klikając opcję UsuńWyłącz pamięć podręczną na określonej stronie za pomocą Flask

Po usunięciu użytkownik zostanie przekierowany na stronę wpisów, ale element nadal tam jest, a strona musi zostać ponownie załadowana, aby pokazać efekt usunięcia. Jeśli wyłączyć buforowanie problem znika, ale naprawdę chcę mieć w pamięci podręcznej wszystkich innych stron ...

Dodanie tych znaczników nie działa, myślę, że moja przeglądarka po prostu je ignoruje

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

ja umożliwiając koryta cache:

@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 

czy istnieje sposób mogę wyłączyć go dla konkretnej strony?

edit

jak sugeruje Próbowałem za pomocą otoki:

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) 

i owinąć stronę chcę wihtout cache w dekoratora @no_cache, nadal nie miał szczęścia ...

Odpowiedz

5

Możesz spróbować dodać nagłówki kontroli pamięci podręcznej tylko wtedy, gdy nie ma takich nagłówków dla określonej strony:

@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 

I w kodzie strony - np .:

@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' 

Chodzi o to, że nie powinno przesłonić nagłówki w @app.after_request dla wszystkich stron - tylko dla tych, którym cache nie jest wyraźnie wyłączone.

Ponadto, może chcesz przenieść kod dodawanie nagłówków do owinięcia takich jak @no_cache - dzięki czemu można używać go tak po prostu:

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

dzięki za wskazanie, że nie mogę dodać nagłówki kontroli pamięci podręcznej jeśli już tam są, nie pomyślałem o tym ... próbowałem robić, co sugerowałeś, próbując z otoką i próbując po prostu dodać nagłówki odpowiedzi, ale pamięć podręczna nadal jest tam z jakiegoś powodu ... –

+0

@ LucaBrozzi, sprawdź, czy otrzymujesz żądane nagłówki w narzędziach programistycznych Chrome/Mozilli. Patrz np. ta odpowiedź, jeśli nie wiesz, jak to zrobić: http://stackoverflow.com/questions/4423061/view-http-headers-in-google-chrome. Jeśli wyraźnie zobaczysz, że nie ma nagłówka 'Cache-Control: no-cache', to nadal jest problem z overridenem nagłówków w twoim' @ app.after_request' handler. – NikitaBaksalyar

+0

nah zapomniałem zmienić linię, twoje rozwiązanie było prawidłowe, dziękuję bardzo –

Powiązane problemy