In meiner Flask-App serviere ich die statischen Assets über die App in der Dev-Umgebung, aber ich möchte ein CDN in der Produktion verwenden. Jedes Asset wird in eine Vorlage namens base.hmtl
geladen, daher denke ich, dass die einfachste Lösung darin besteht, eine Variable an die Renderfunktion zu übergeben und sie in der Vorlage zu verwenden:
Normalerweise wäre es eine leere Zeichenfolge im dev-env und die cdn-URL in der Produktion. Ich möchte vermeiden, diese STATIC_URL
Variable an jede Ansicht zu übergeben. Ich könnte es mit
Aber für mich scheint das ein bisschen hacky. Gibt es einen besseren Weg, um dieses Problem zu lösen?
Sie müssen nicht ändern, wie Sie mit statischen Dateien verknüpfen, Sie können weiterhin url_for('static', filename='myfile.txt')
verwenden. Ersetzen Sie die statische Standardansicht durch eine, die zum CDN umleitet, falls sie konfiguriert ist.
Unabhängig davon, ob Sie sich auf einem Dev-Computer oder in einer Produktion befinden, legen Sie den STATIC_URL
config-Wert auf den CDN fest, und Anforderungen für statische Dateien werden dorthin umgeleitet.
Redirects sind relativ billig und werden von Browsern erinnert. Wenn Sie an den Punkt kommen, an dem die Leistung von ihnen signifikant beeinflusst wird, können Sie eine Funktion schreiben, die direkt mit dem CDN verknüpft ist.
%Vor% Der template_global
Decorator stellt die Funktion in allen Vorlagen zur Verfügung. Verwenden Sie es anstelle von url_for
, wenn Sie URLs für statische Dateien benötigen.
Dieser flask cdn Integrationsleitfaden kann es wert sein, sich durchlesen zu lassen. Grundsätzlich können Sie die Flask-CDN-Erweiterung installieren und Ihre CDN-URL in Ihrer app.py-Datei wie folgt definieren:
%Vor%