Flask で静的ファイルを提供する方法
P粉754473468
P粉754473468 2023-08-23 15:50:41
0
2
568
<p>これは恥ずかしいことです。 <code>Flask</code> でアプリを作成しましたが、現在は CSS と JS へのリンクを含む静的な HTML ページを提供するだけです。 <code>Flask</code> のドキュメントに、静的ファイルを返す方法について説明している場所が見つかりません。はい、<code>render_template</code> は使用できますが、データがテンプレート化されていないことがわかっています。 <code>send_file</code> または <code>url_for</code> は正しいと思いますが、それらを機能させることができません。その間に、ファイルを開いて内容を読み取り、適切な MIME タイプを使用して <code>Response</code> を設定します: </p> <pre class="brush:php;toolbar:false;">os.path をインポート from flask import Flask、応答 app = Flask(__name__) app.config.from_object(__name__) def root_dir(): # プラグマ: カバーなし return os.path.abspath(os.path.dirname(__file__)) def get_file(ファイル名): # プラグマ: カバーなし 試す: src = os.path.join(root_dir(), ファイル名) # flask が静的ファイルを返す方法を理解する #試してみた: # - render_template # - ファイルを送信 # これはそれほど自明ではないはずです open(src).read() を返す IOError を除く exc: str(exc)を返す @app.route('/',methods=['GET']) def metrics(): # プラグマ: カバーなし content = get_file('jenkins_analytics.html') return Response(content, mimetype="text/html") @app.route('/', デフォルト={'パス': ''}) @app.route('/<パス:パス>') def get_resource(path): # プラグマ: カバーなし MIME タイプ = { ".css": "テキスト/css", ".html": "テキスト/html", ".js": "アプリケーション/JavaScript", } complete_path = os.path.join(root_dir(), path) ext = os.path.splitext(パス)[1] mimetype = mimetypes.get(ext, "text/html") コンテンツ = get_file(完全なパス) return Response(コンテンツ、mimetype=mimetype) if __name__ == '__main__': # プラグマ: カバーなし app.run(port=80)</pre> <p>これのコード サンプルまたは URL を提供したい人はいますか?それはとても簡単なことだとわかっていました。 </p>
P粉754473468
P粉754473468

全員に返信(2)
P粉155551728

静的ファイルの場所を移動したいだけの場合、最も簡単な方法はコンストラクターでパスを宣言することです。以下の例では、テンプレートと静的ファイルを web というサブフォルダーに移動しました。

リーリー
  • static_url_path='' URL から先行するパスをすべて削除します。
  • static_folder='web/static' フォルダー内で見つかったすべてのファイルを提供します web/static 静的ファイルとして。
  • template_folder='web/templates' 同様に、これも変更されます テンプレートフォルダー。

このメソッドを使用すると、次の URL から CSS ファイルが返されます:

リーリー

最後に、フォルダー構造のスナップショットを示します。flask_server.py は Flask インスタンスです。

いいねを押す +0
P粉212971745

運用環境では、静的フォルダーからの /static リクエストを処理するようにアプリケーションの前に HTTP サーバー (Nginx、Apache など) を構成します。専用 Web サーバーは、静的ファイルを効率的に提供するのに非常に優れていますが、容量が少ない場合は Flask と比べて違いに気づかないかもしれません。

Flask は、Flask アプリケーションを定義する Python モジュールの隣の static フォルダーの下に任意の filename を提供する /static/ ルートを自動的に作成します。 。静的ファイルにリンクするには、url_for を使用します: url_for('static', filename='js/analytics.js')

send_from_directory を使用して、独自のルートのディレクトリからファイルを提供することもできます。これはベース ディレクトリとパスを取得し、ユーザーが指定したパスを安全に受け入れることができるように、パスがそのディレクトリ内に含まれていることを確認します。これは、ログインしているユーザーに権限があるかどうかなど、ファイルを提供する前に何かを確認したい場合に便利です。 リーリー

#send_file または send_static_file をユーザー指定のパスとともに使用しないでください。これにより、ディレクトリ トラバーサル攻撃にさらされることになります。 send_from_directory 既知のディレクトリへのユーザー指定のパスを安全に処理するように設計されており、パスがディレクトリをエスケープしようとするとエラーが発生します。 ファイル システムに書き込まずにメモリ内にファイルを生成している場合は、

BytesIO

オブジェクトを send_file## に渡すことで、ファイルとして提供できます。 # 。この場合、ファイル名やコンテンツ タイプなどを推測できないため、追加のパラメータを send_file に渡す必要があります。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート