Python プログラミング

[Python] Flaskで静的ファイル用ディレクトリを追加 [Blueprint]

投稿日:2018年10月1日 更新日:

こんにちは!シミダイ(@shimidai2100)です。

PythonのWebフレームワーク「Flask」を使用して、「静的ファイル用ディレクトリを追加する」方法を紹介します。

追加するにはFlaskの「Blueprint」を使います。

Flaskでは静的ファイル用ディレクトリは「static」だけですが、image/css/javascriptのディレクトリも追加することが出来るようになります。

また合わせて「static」ディレクトリの変更方法も紹介します。


FlaskのBlueprintとは?

「Blueprint」とは、アプリケーションの機能毎に分割して実装するためのものです。
Flaskの公式ドキュメントでは、大きなプロジェクトを開発するための方法としてBlueprintが推奨されています。

Flask uses a concept of blueprints for making application components and supporting common patterns within an application or across applications. Blueprints can greatly simplify how large applications work and provide a central means for Flask extensions to register operations on applications. A Blueprint object works similarly to a Flask application object, but it is not actually an application. Rather it is a blueprint of how to construct or extend an application.

URL:Modular Applications with Blueprints

Blueprintの利用するためには必ず以下の手順を踏む必要があります。

  1. Blueprintを宣言・定義
  2. 1.で宣言、定義したBlueprintをアプリケーションに登録

この2点は必ず抑えておきましょう。

静的ファイル用ディレクトリを追加するサンプル

実際に静的ファイル用ディレクトリを追加するサンプルを紹介します。

今回は「static」ディレクトリ配下に「javascript」、「css」、「image」ディレクトリを追加するサンプルを紹介します。

ファイルは以下の2つで構成します。

  • setBlueprint.py:Blueprintを宣言・定義
  • app.py:Blueprintを登録

今回はサンプルでは以下のディレクトリ・ファイル構成で実装します。

Blueprintを宣言・定義

まずはBlueprintを宣言・定義をします。

第1引数がBlueprintを登録する時の名前になります。

第2引数「static_url_path」がアクセスするURLを指定します。今回は以下のようにURLにアクセスできます。

  • http://hostnem:port/javascript
  • http://hostnem:port/css
  • http://hostnem:port/image

第3引数「static_folder」がサーバー上のディレクトリ構成になります。

Blueprintをアプリケーションに登録

Blueprintの登録には「register_blueprint」メソッドを使用します。

上記のように設定してあげれば簡単に登録することができます。

参考More than one static path in local Flask instance

補足:url_forを使用して静的ファイル用ディレクトリにアクセス

実際にFlaskにアクセスするために「url_for」関数を使用します。

Flaskの「templates」を利用した例は以下になります。

「url_for()」の第1引数にBlueprintのエンドポイント名「blueprint_name.static」を指定します。

第2引数「filename」で実際のファイル名を指定します。

 

スポンサードリンク

関連記事

-Python, プログラミング

Translate »

Copyright© shimidai2100 , 2018 All Rights Reserved.