首頁 > 後端開發 > Python教學 > 如何在 Flask 應用程式中高效地提供靜態文件?

如何在 Flask 應用程式中高效地提供靜態文件?

Susan Sarandon
發布: 2024-12-21 01:07:10
原創
384 人瀏覽過

How Can I Serve Static Files Efficiently in a Flask Application?

在 Flask 中提供靜態檔案

提供靜態檔案是 Web 開發中的常見任務。 Flask 提供了多種處理此問題的方法,包括使用內建靜態資料夾路由或 send_from_directory 函數。

內建靜態資料夾路由

Flask 自動建立一個/static/ 下方靜態檔案的路由小路。要從此路徑提供靜態文件,只需將它們放在 Flask 應用程式模組旁邊的靜態資料夾中即可。然後,您可以使用 url_for 連結到靜態檔案。

from flask import url_for

@app.route('/')
def home():
    return url_for('static', filename='css/style.css')
登入後複製

send_from_directory 函數

send_from_directory 函數可讓您從應用程式中的任何目錄提供檔案。它有兩個參數:基底目錄和請求的檔案路徑。它確保請求的路徑包含在基本目錄中,防止目錄遍歷攻擊。

from flask import send_from_directory

@app.route('/reports/<path:path>')
def send_report(path):
    return send_from_directory('reports', path)
登入後複製

注意:

不要將 send_file 或 send_static_file 與 user-提供的路徑,因為這可能會讓您面臨漏洞。相反,請使用 send_from_directory,它旨在安全地處理使用者提供的路徑。

提供記憶體中檔案

如果您需要提供在以下位置產生的檔案記憶體而不將其寫入磁碟,您可以使用BytesIO 建立記憶體中檔案對象並將其傳遞給send_file。您還需要指定檔案名稱、內容類型和其他屬性。

from io import BytesIO
import zipfile

@app.route('/download.zip')
def download_zip():
    buffer = BytesIO()
    zipfile.ZipFile(buffer, 'w').write('file.txt')
    buffer.seek(0)
    
    return send_file(buffer, 
                       mimetype='application/zip', 
                       as_attachment=True, 
                       attachment_filename='download.zip')
登入後複製

以上是如何在 Flask 應用程式中高效地提供靜態文件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板