flask app flask project layout with blueprint bootstrap
このチュートリアルでは、FlaskプロジェクトでFlaskアプリ、Flaskブループリント、Flaskブートストラップを使用する方法について説明します。
このトピックでは、Flask-Appbuilderの原型から少し離れて、Flaskブループリントの理解を深めます。 Flask、Flaskテンプレートとビュー、およびMongoDB、SQLite、MySQLなどのデータベースを使用したFlaskに関するチュートリアルをお読みください。私たちはflaskTutorialAppと呼ばれるサンプルプロジェクトを使用しています。
ただし、flask fabcreate-appコマンドを使用してプロジェクトを最初から作成することもできます。このコマンドは、指定されたアプリケーション名に基づいて、Flaskプロジェクトに必要なスキャフォールディングとアプリケーションディレクトリを作成します。
=> すべてのフラスコトレーニングシリーズを参照してください
このチュートリアルでは、Flaskアプリ、Flaskブループリント、Flaskブートストラップについて説明します。最初に、Flask-Appbuilderが提供する既存のスキャフォールディングを使用してFlaskアプリを開発します。次に、hello2というFlaskブループリントを作成します。最後に、Flaskアプリをドッキングして、FlaskDockerの概念について説明します。
学習内容:
フラスコアプリ
Flaskアプリは、Flaskアプリケーションの別名です。 __init__。pyファイルに記述されたコードに気付くと、Flaskのインスタンスが作成され、変数にappという名前が付けられていることがわかります。クラスFlaskのインスタンスは、WSGIアプリケーションのインスタンスであるFlaskApplicationです。
from flask import Flask app = Flask(__name__)
フラスコの青写真
Flaskブループリントを使用すると、関連する機能をまとめて、より良い開発プラクティスに役立てることができます。 Flaskブループリントの利点のいくつかは次のとおりです。
- 大規模アプリケーションの簡単な編成。
- 同じブループリントを複数回登録することにより、コードの再利用性が向上します。
- 一連の操作が記録され、ブループリントの登録後に再生できます。
上記の背景がFlaskブループリントに示されているので、先に進んで最初のブループリントを設計できます。ブループリントもモジュールと考えることができます。 HelloWorldブループリントを作成しましょう。
ブループリントのすべてのコンポーネント、リソース、および機能は、Flaskアプリケーションの他のソースコードとは別に保持および編成されます。これは、Flaskブループリントがそのビュー、フォーム、モデル、静的ファイル、およびテンプレートを持つことができることを意味します。
同じリソースセットから複数のブループリントを作成できます。ただし、これは混乱を招く可能性があり、適切な方法ではありません。
Flaskブループリントファイルとディレクトリを作成する
hello2という名前のFlaskブループリントの作成を始めましょう。以下のスクリプトを使用して、アプリケーションディレクトリに移動した後にソースvenv / bin / activateを使用して仮想環境をアクティブ化した後、ディレクトリ構造を作成します。
blueprint_name='hello2' mkdir '$blueprint_name' mkdir -p '$blueprint_name/templates/$blueprint_name' touch '$blueprint_name/templates/$blueprint_name/hello.html' mkdir '$blueprint_name/static/' touch '$blueprint_name/__init__.py' touch '$blueprint_name/views.py'
hello2ブループリントに、__init__。pyにインポートするビューを持たせたいと考えています。ブループリント用にテンプレートと静的ディレクトリを使用して個別のディレクトリを作成し、Flaskビューをレンダリングして静的リソースを提供します。
Flaskブループリントディレクトリ構造
ブループリントのディレクトリ構造は次のようになります。 treeコマンドを使用して、同様の出力を作成します。
Create Flask Blueprint View
それでは、views.py内に簡単なビューを定義しましょう。 hello2 / views.pyを開き、以下のコードスニペットを入力します。
from flask import Blueprint, render_template hello2 = Blueprint( 'hello2', __name__, template_folder='templates', static_folder='static' ) @hello2.route('/hello2') def hello2_view(): greeting = 'Hello World 2' return render_template('hello2/hello.html', greeting=greeting)
Blueprintクラスとrender_templateメソッドをインポートします。次に、テンプレートと静的ディレクトリの名前を指定して、ブループリントオブジェクトを作成します。
CPU温度を監視するための最良のソフトウェア
次に、デコレータ@ hello2.routeと、hello2_viewという名前のコントローラを使用してルートを定義します。このコントローラーはPython関数です。この関数では、greetingという変数に値を割り当て、それをrender_templateメソッドに渡します。
Flaskブループリントテンプレートを作成する
それでは、テンプレートhello.htmlを作成しましょう。以前のチュートリアルを読んでいる場合は、テンプレートがHelloWorldビューをレンダリングするために作成したものと同じ名前であることに気付いたはずです。このhello2ブループリントでは、前のテンプレートを拡張して新しいテンプレートを作成します。
さらに、render_templateを呼び出してテンプレートで挨拶をレンダリングするときに、パスセマンティックhello2 /hello.htmlを使用したことに注意してください。このパターンは、同じ名前のテンプレート間の競合を回避します。
以下のコードスニペットを使用してhello.htmlを作成し、hello2 / templates / hello2 / pathの下に保存します。
{% extends 'hello.html' %} {% block hello %} {{ greeting }} , from Software Testing Help.
{% endblock %}
このテンプレートは、hello.htmlとほぼ同じです。ただし、ほとんどのHTML部分はhello.htmlから継承されます。 {%block hello%}と{%endblock%}の使用に注意してください。 hello2 / hello.htmlのブロックhelloは、ベーステンプレートhello.htmlのブロックhelloをオーバーライドします。
次に、hello2ブループリントの__init__。pyファイルを開き、その中の以下のコードについて説明します。
from app.hello2.views import * # expose all views at the blueprint level
このステートメントでは、hello2ブループリントのviews.pyで作成したすべての装飾されたメソッドをインポートします。必要に応じて、使用またはテストの準備ができているメソッド/コントローラーのみをインポートできます。
FlaskアプリにFlaskブループリントを登録する
次に、Flaskアプリケーションディレクトリの下にある__init__。pyを開き、次のコードに示すようにhello2ブループリントを登録します。
from app.hello2 import hello2 app.register_blueprint(hello2, url_prefix='/hello2')
ここでも、ビューを選択的にインポートし、使用またはテストの準備ができているビューのみを登録できることに注意してください。
プロジェクトのルートディレクトリからコマンドpythonrun.pyを使用してFlaskアプリをデバッグモードで実行し、http:// localhost:8080 / hello2に移動して、hello2のビューが正常に機能するかどうかを確認します。
ブラウザでの結果は、以下に示す例のようになります。

Twitterのブートストラップフレームワークを使用して、hello2ブループリントのより良いプレゼンテーションに取り組みましょう。さらに、次のセクションでは、Flaskブループリントの動作を変更するためのオプションのパラメーターについて詳しく学習します。 FlaskBootstrapと呼ばれるFlaskブループリントの例を使用してそれを見てみましょう。
フラスコの青写真を使用したモジュラーフラスコのアプリケーション例
hello2 Flaskブループリントの学習に基づいて、Flaskでモジュラーアプリケーションを作成する方法を理解するために、さらにいくつかのブループリントを追加しましょう。
電子書籍、チュートリアル、およびコースの形式で訪問者にコンテンツを提供するWebアプリケーションがあると仮定します。また、チームとホームページに関する情報に関する追加コンテンツもあります。
これらの新機能を既存のアプリケーションに対応させようとすると、views.pyにビューを作成し、対応するテンプレートをアプリケーションテンプレートディレクトリに作成する必要があります。同様に、models.pyとforms.pyにモデルとフォームを作成する必要があります。
ただし、すべてのアプリケーションコードの保守が面倒になり、他のチームメンバーとのコラボレーションが複雑になりすぎて、コミットの競合や複雑な開発ワークフローが発生する可能性があります。
現在、この従来のアプローチでは、アプリケーションの構造は次のようになっています。
このようなシナリオを回避するために、Flaskブループリントを利用して、機能とそれぞれのコンテンツに固有のモジュールを作成できます。個別のリソースを使用して、Flaskブループリントをいくつか作成しましょう。
各Flaskブループリントのレイアウトは、以下に示すもののようになります。
以下のスクリプトを使用して、計画されたFlaskブループリントに必要なファイルとディレクトリを作成します。プロジェクトのルートディレクトリからこのスクリプトを実行します。
cd app for dir in home courses tutorials ebooks do echo 'generating files for $dir ..' mkdir -p $dir/templates/$dir touch $dir/templates/$dir/$dir.html mkdir $dir/static touch $dir/static/style.css touch $dir/__init__.py touch $dir/views.py touch $dir/models.py touch $dir/forms.py done
まず、ホームモジュールの機能を作成しましょう。
ホームディレクトリの下にあるviews.pyを開き、以下のコードで更新します。
from flask import render_template, Blueprint home = Blueprint('home', __name__, template_folder='templates', static_folder='static') @home.route('/') def index(): return render_template('home/home.html')
このファイルでは、FlaskのBlueprintクラスをインポートし、個別のテンプレートと静的フォルダーを使用して必要なパラメーターを使用してインスタンス化しました。次に、@ home装飾を使用して、indexと呼ばれるviewメソッドの関連ルートを宣言します。
次に、アプリのテンプレートディレクトリの下にbase.htmlJinja2テンプレートを作成します。以下のコードを使用してファイルを更新します。
from Software Testing Help.
Learn More >> {% endblock %}
Bootstrapのbase.htmlから拡張しました。クラスコンテナとヒーローユニットのdivの使用に注意してください。さらに、ユーザーが詳細を確認するためのボタンを作成しました。このHTMLを変更し、TwitterのBootstrapフレームワークのクラスを使用しました。
次に、ブラウザのhttp:// localhost:8080 / hello2.htmlでページを更新して、hello2.htmlの外観の変更を確認します。
Changed Hello2のビューは、次のようになります。

Flask-Bootstrapの使用は、オーバーライドまたは変更に使用できるブロックに完全に依存しています。下記のブロックを使用して、エクスペリエンスをカスタマイズできます。可能なすべてのブロックの詳細なリストは、https://pythonhosted.org/Flask-Bootstrap/basic-usage.htmlで確認できます。
ブロックを完全に置き換えるのではなく、単に修正したい場合は、Jinja2のsuper()関数を使用して結果を得ることができます。
hello2 / staticの下にhello2.cssというファイルを作成し、以下のコードスニペットを配置して、hello2 /hello.htmlの段落の色のスタイルを設定します。
p { color: orange; }
以下に示すコードスニペットを取得して、hello2 /hello.htmlに配置します。
{% block styles } {{ super() }} {% endblock %}
次に、Flask Blueprint hello2のviews.pyを開き、以下に示すようにブループリントステートメントを変更します。
hello2 = Blueprint('hello2', __name__, template_folder='templates', static_folder='static')
Flask Blueprintの登録済みURL、つまりhttp:// localhost:8080 / hello2に再度移動します。これまでに行った変更による結果は、以下のようになります。
EclipseにMavenを追加する方法

フラスコドッカー
Dockerは、アプリケーションのコンテナー化に役立ちます。仮想マシンなどの完全な仮想化環境を必要としない方法で、Flaskアプリケーションが必要とする環境を分離します。
さらに、Dockerコンテナーのフットプリントは最小限であり、オーケストレーションプラットフォームを使用して管理および拡張するのがより快適です。最近では、他のすべてのアプリケーションにもコンテナ化されたデプロイがあるため、サンプルアプリケーションをDockerコンテナとしてデプロイする方法を学ぶ必要があります。
LinuxベースのコンテナはWindowsとMACで実行できます。したがって、ドッキングされたFlaskアプリは、それが構築されたオペレーティングシステムに関係なく、任意のオペレーティングシステムにデプロイできます。
このセクションでは、Flaskアプリをドッキングする手順について説明します。このプロジェクトをドッキングして、すべての依存関係が内部にパックされたコンテナーにデプロイできるようにします。
最初、 Dockerをインストールする あなたのマシンで。
sudo apt-get install docker.io
インストールが完了したら、サンプルプロジェクトのルートディレクトリに移動して、Dockerfileを作成します。
そのDockerfileに以下のコードを記述します。
FROM python:3 ADD . /flaskTutorialApp WORKDIR /flaskTutorialApp RUN pip install -r requirements.txt ENTRYPOINT ('python') CMD ('run.py')
以下に示すように、config.pyファイルを更新し、データベースをSQLiteに変更します。
アニメをオンラインで無料で見る場所
# The SQLAlchemy connection string. SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
また、このチュートリアルシリーズでSQLiteを使用するのが初めての場合は、flask fabcreate-adminコマンドを使用してadminユーザーを作成してください。
管理者ユーザーがアプリケーションにログインできるかどうかを確認します。
次に、以下のコマンドを使用して、サンプルアプリケーションのDockerイメージをビルドします。
sudo docker build --tag flask-tutorial
このコマンドは、Dockerハブからリソースをダウンロードするため、時間がかかります。このコマンドが完了したら、以下のコマンドを使用して画像が表示されていることを確認します。
sudo docker images
ここで、この最近作成されたDockerイメージを実行します。
sudo docker run -p 5001:8080 flask-tutorial:latest
コンソールには、開発サーバーのログメッセージが表示されます。
Dockerをインストールすると、docker0という名前の仮想NICが作成されます。 sudoifconfigコマンドを使用してIPアドレスを見つけます。 DockerのIPを取得したら、以下のURLに移動してアプリケーションにアクセスできます。
http://:5001
アプリケーションの開発に自信が持てたら、DockerイメージをDocker Hubにデプロイして、他のユーザーがダウンロードして使用できるようにします。
フラスコの青写真のテスト
ここで、Blueprinthello2をテストするためのいくつかのテストを作成しましょう。クライアントが/ hello2エンドポイントでリソースのGetリクエストを送信したときに、サンプルアプリが正しいHTTPコードを返すかどうかを見てみましょう。覚えているかと思いますが、Flaskブループリントhello2を/ hello2という値のurl_prefixで登録しました。
テスト中のtest_blueprint.pyというファイルを作成し、そのファイルに次のテストを追加します。
def test_hello2(client): resp = client.get('/hello2') assert 308 == resp.status_code
HTTP 308は永続的なリダイレクトに関連しており、Flaskアプリはリクエストをhello2と呼ばれるブループリントに関連するリソースにリダイレクトする必要があると予想されます。
次に、ブループリントのリソースのルートパスを確認するための別のテストを追加しましょう。テストを追加して、値があるかどうかを確認しましょう。
from app.hello2 import hello2 def test_rootpath(): assert hello2.root_path is not None
次に、これらのテストを他のテストと一緒に実行して、合格していることを確認しましょう。
pytest -v
以下に示すように、テスト結果の同様の出力が表示されます。

次に、すべての変更をリポジトリにコミットし、それらの変更をGithubのリモートリポジトリに公開します。コードとの違いをマスターブランチのコードと比較し、競合がない場合はプルリクエストを作成します。
プルリクエストは、Githubワークフローの一部であるビルドジョブを呼び出します。 tutorial-4からのプルリクエストのすべてのチェックが失敗しない場合は、このブランチをマスターと安全にマージできます。

よくある質問
Q#1)Flask BluePrintとは何ですか?
回答: Flaskブループリントは、Flaskアプリケーションをより小さく再利用可能なモジュールに構造化する方法です。 Flaskブループリントには、ビュー、テンプレート、静的ファイル、モデル、フォームなどの個別のリソースがあります。Flaskブループリントアプローチを使用して、保守が容易でスケーラブルなFlaskアプリケーションを作成します。
Q#2)Flaskブループリントをどのように使用しますか?
回答: Flaskブループリントを使用するには、app.register_blueprintメソッドを使用して、それをインポートし、FlaskApplicationオブジェクトに登録する必要があります。 url_prifixパラメーターに値を渡して、Flaskブループリントのルートへのパスを付加することができます。
結論
このチュートリアルでは、Flaskブループリントと、Flaskアプリの静的リソースを作成する概念について説明しました。 Flask-Bootstrapと呼ばれるFlaskプラグインの助けを借りて、ブループリントリソースの考えとともにFlaskブループリントを使用する利点を調査しました。
また、サンプルのFlaskチュートリアルアプリケーションのDockerイメージを作成する概念についても説明しました。さらに、Flaskブループリントを検証するための2つのテストも作成しました。
次のチュートリアルでは、Flaskを使用してWebアプリケーションで機能を構築する際に、一般的に従うパターンについて説明します。
=> フラスコを最初から学ぶには、こちらにアクセスしてください