儘管很簡單,但在 Flask 中提供靜態檔案可能是一項令人費解的任務。本文旨在為這個常見問題提供全面的答案。
Flask 本質上支援透過預先定義路由 /static/
url_for('static', filename='js/analytics.js')
為了在生產中獲得最佳性能,建議配置您的HTTP 伺服器,例如作為Nginx 或Apache,在到達Flask 應用程式之前處理靜態檔案請求。
如果您希望在 Flask 應用程式中實作靜態檔案服務,請考慮使用 send_from_directory。此函數採用兩個參數:基底目錄和路徑,確保提供的路徑不會超出指定的基底目錄。
@app.route('/reports/<path:path>') def send_report(path): return send_from_directory('reports', path)
為避免任何安全漏洞,切勿將 send_file 或 send_static_file 與不受信任的路徑,因為這可能導致目錄遍歷攻擊。 send_from_directory 是專門為減輕這種風險而設計的。
此外,如果您在記憶體中產生檔案而不將其寫入磁碟,則可以將 BytesIO 物件傳遞給 send_file 以像常規檔案一樣提供它。但是,在這種情況下,您需要明確指定 send_file 的其他參數來處理檔案名稱和內容類型等詳細資訊。
以上是如何在 Flask 應用程式中高效地提供靜態檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!