webentwicklung-frage-antwort-db.com.de

Deaktivieren der Zwischenspeicherung in Flask

Ich habe einige Probleme mit dem Caching. Ich verwende eine sehr kleine Webanwendung, die einen Frame liest, auf der Festplatte speichert und dann im Browserfenster anzeigt.

Ich weiß, es ist wahrscheinlich nicht die beste Lösung, aber jedes Mal, wenn ich diesen Leserahmen unter demselben Namen speichere, wird er von jedem Browser zwischengespeichert.

Ich habe versucht, HTML-Meta-Tags zu verwenden - kein Erfolg:

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

Ich habe auch dieses probiert (flaschenspezifisch):

resp.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
resp.headers["Pragma"] = "no-cache"
resp.headers["Expires"] = "0"

So habe ich versucht, resp-Header zu ändern:

r = make_response(render_template('video.html', video_info=video_info))

r.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
r.headers["Pragma"] = "no-cache"
r.headers["Expires"] = "0"

Zwar führen sowohl Google Chrome als auch Safari Zwischenspeicherungen aus.

Was könnte das Problem sein?

Danke im Voraus

22
drsealks

OK,

endlich funktionierte es damit:

@app.after_request
def add_header(r):
    """
    Add headers to both force latest IE rendering engine or Chrome Frame,
    and also to cache the rendered page for 10 minutes.
    """
    r.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
    r.headers["Pragma"] = "no-cache"
    r.headers["Expires"] = "0"
    r.headers['Cache-Control'] = 'public, max-age=0'
    return r

Wenn Sie dies hinzufügen, wird diese Funktion nach jeder durchgeführten Anforderung aufgerufen. Bitte sehen Sie hier

Ich würde mich freuen, wenn mir irgendjemand erklären könnte, warum das Überschreiben der Kopfzeilen nicht vom Seitenhandler aus funktioniert.

Vielen Dank.

42
drsealks

Wenn Sie immer das gleiche Problem haben, hat Flask die Aktualisierungen in JS- und CSS-Dateien nicht angezeigt, da Flask standardmäßig den maximalen Wert von 12 Stunden hat. Sie können es auf 0 setzen, um das Problem wie folgt zu lösen:

app = Flask(__name__, static_url_path='/static') app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0

0
Ilyas