ホームページ > バックエンド開発 > Python チュートリアル > Flask アプリケーションで静的ファイルを効率的に提供するにはどうすればよいですか?

Flask アプリケーションで静的ファイルを効率的に提供するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-21 01:07:10
オリジナル
464 人が閲覧しました

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 関数を使用すると、アプリ内の任意のディレクトリからファイルを提供できます。ベース ディレクトリと要求されたファイル パスの 2 つの引数を取ります。これにより、要求されたパスがベース ディレクトリ内に含まれることが保証され、ディレクトリ トラバーサル攻撃が防止されます。

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 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート