開発者向け
ヘッドレス、Python、Flask:マイクロフレームワークで大きな柔軟性を享受する方法
By Michael Berry
プロジェクトの要件は進化し、成功するWebサイトは時間とともに変化します。 PythonでWebサイトの成長をどのように管理できますか?
この記事では、ヘッドレスCMSからFlaskアプリケーションデータをフィードする方法を示し、2つの組み合わせがより柔軟なWebサイトアーキテクチャになる理由について説明します。 Flaskを初めて使用する場合は、 Flaskの公式ドキュメントにあるユーザーガイドをご覧ください。すばらしい序文、クイックスタートの紹介、および完全な長さのチュートリアルがあります。
ヘビのように成長する
奇妙なオープナー、私は知っていますが、私に耐えてください。 ヘビは死ぬまで成長します。彼らが成熟するにつれて彼らの成長はかなり遅くなりますが、彼らが養われていてもそれは止まりません。これを自分の生活やスキルに応用できると思います。毎日何かを学び、頻繁にスキルを練習し、取り組んでいることは何でも進歩し、洗練し続け、新しい情報を自分に与えてください。
私はPythonでコードを書くのが好きです。それは明白であり、エントリー学習曲線が低く、人間が読める形式であり、さまざまな用途があります。 Pythonプロジェクトは、単純なファイルシステムのCRUDスクリプトから、堅牢な機械学習ライブラリまで多岐にわたります。 Pythonを使用すると、スキルが向上するにつれて、Pythonには常に場所があると感じます。
Pythonを使用することは、私にとって「愛の労働」になりました。私は、私が定期的に取り組んでいるWeb開発プロジェクトにも同じ歓迎の気持ちを広げたいと思いました。最初は小さいが、プロジェクトが進むにつれて複雑さを増すことができるWebフレームワークが必要でした。フラスコは法案に完全に適合します。
フラスコとは何ですか?
Flaskは、アプリケーションコードをWebサーバーゲートウェイインターフェイス(WSGI)とテンプレートにブリッジする最小限のPythonWeb開発フレームワークです。データベースレイヤー、フォームレイヤー、またはその他の機能は付属していません。 公式ドキュメントには、次のように書かれています。
' Flaskは、必要なものすべてであり、不要なものはありません...コードベースが大きくなるにつれて、プロジェクトに適した設計上の決定を自由に行うことができます。 Flaskは、Pythonが提供する最高の状態で、非常に単純な接着剤層を提供し続けます。 '
アプリケーションが食事だった場合、Flaskは「肉とジャガイモ」ではなく、プレートとフォークです。
Flaskの柔軟性は、拡張性のオプションがすべてあるため、簡潔に要約するのは困難ですが、簡潔にするために、スケーラビリティと開発の容易さに焦点を当てました。
スケーラビリティ
- Flaskは、アーキテクチャ設計の決定を指示するものではなく、サービスを相互にリンクする導管として機能します。 基本的に、Jinjaを介したすぐに使用可能なテンプレートと、Werkzeugを介したWebサーバーゲートウェイインターフェイス(アプリケーションのルーティングと接続用)が付属しています。したがって、最小限から始めて、徐々に複雑さを増すことができます。
- 拡張機能、APIフック、ミドルウェア、およびサブクラス化は、要件が発生したとき、またはプロジェクトがFlaskドキュメントに従って「大きくなる」準備ができたときに使用できます。
- ブループリントとパッケージとしての実行中のサイトは、より大きなアプリケーションで利用できます。
たとえば、図では、サイトが将来サービスを提供する可能性のある3つの異なるタイプのクライアント要求を確認できます。

単純なページを提供するだけでよい場合は、サーバー上のFlaskアプリケーションのみが必要になる場合があります。ただし、時間が経つにつれて、拡張機能を備えた「ログイン」サポート、ミドルウェアを備えたメディアサーバー、または動的ルーティングのブループリントを追加する必要がある場合があります。 Flaskは、これらのシナリオに合わせて拡張できます。
開発のしやすさ
- ルーティングは非常に簡単です。1行でデコレータを関数にバインドします。そのルートがヒットするたびに、関数が実行されます。
@app.route( '/' )
def index ():
return 'Index Page Text'
@app.route( '/hello' )
def hello ():
return 'Hello, World!'
- テンプレートで変数を使用する場合、定型文やセットアップは必要ありません。ビュー内のrender_template関数に変数を渡すと、テンプレート内で変数にアクセスできます。
# in file: home/view.py:
return render_template( 'home/index.html' ,hero=hero,articles=articles) # in file: templates/home/index.html
{{hero.elements.title.value}}
ヘッドレスとフラスコ:なぜそれが完璧にマッチするのか
フレームワークとCMSの選択に関しては、考慮すべきことがたくさんありますが、コスト、複雑さ、および将来を見据えた設計は、プロジェクトが柔軟であるかどうかに常に関係しています。ヘッドレスCMSとFlaskを使用すると、これらの要件を正面から満たす理由は次のとおりです。
どちらもマイクロサービスモデルを使用しています
マイクロサービスアーキテクチャを使用してプロジェクトを設計すると、コードのフットプリントが小さくなります。マイクロフレームワークを使用するということは、機能を備えた「ソリューションの肥大化」がないことを意味します。最高の統合のみを使用し、プロジェクトが成熟するにつれて、これらのツールを段階的に追加できます。
前のスケーラビリティ図と同様に、外部サービスとの統合がさまざまなクライアントシナリオを処理するためにどのように見えるかを次に示します。

SaaSヘッドレスCMSを使用すると、管理システムのコードがベンダーによってホストされるため、オーバーヘッドがゼロになります。さらに、コンテンツはプロジェクトのコードから分離されたままであり、通常、新しいCMS機能がリリースされたときにコードを変更する必要はありません。
あなたは特定のチャンネルに縛られていません
ヘッドレスCMSは、オムニチャネル対応の形式でコンテンツを提供します。つまり、コンテンツは組織全体のさまざまなタイプのアプリケーションで再利用できます。 Pythonは機械学習、AI、データエンジニアリングの主要言語であるため、これはコンテンツの将来にとって非常に役立つ可能性があります。
予算さえより柔軟です
ヘッドレスCMSサブスクリプション支払いモデルでは、必要な分だけ支払い、通常は予算と要件に合わせてサブスクリプションプランを調整できます。
Flaskはオープンソースで無料です。これは、あなたの会社のクレジットカードがこれまでに見た中で最も柔軟な請求だと思います。
FlaskをヘッドレスCMSに接続する方法
ウォームアップとエクササイズは柔軟性を維持するための最良の方法であるため、このセクションでは、サンプルサイトのセットアップを実行して、FlaskとヘッドレスCMSの動作を確認しましょう。
Kentico KontentをヘッドレスCMS、 Kontent Python SDK 、 Flaskがアドバイスするより大きなアプリケーション構造、および共有KenticoKontentプロジェクトとして使用します。
完全な開示:私はこの「非公式のKontent Python SDK」を構築し、FlaskをKontentに接続するには、HTTPリクエストライブラリだけで実行できます。しかし、それは私の見解で私に多くのコードを節約しました:

5つのステップでサイトを設定します。
- インストールを実行します
- プロジェクト構造を作成する
- アプリケーションロジックを追加する
- テンプレートロジックを追加する
- サイトを運営する
ステップ:1:インストールを実行する
- virtualenvなどの仮想環境をセットアップします:
py -m venv env
- フラスコの
pip install flask
- Python SDKをインストールします:
pip install kontent_delivery
ステップ2:プロジェクト構造を作成する
- 今のところ、以下の構造で空のpythonファイルとHTMLファイルを作成します。次の手順で、各ファイルにそれぞれのコードを追加します。注:円記号( '/')はディレクトリを示します。
sample/ __init__.py home/ views.py templates/ base.html home/ index.html config.py setup.py
ステップ3:アプリケーションロジックを追加する
- setup.py-このコードを使用すると、プロジェクトをモジュールではなくパッケージとして実行できます。
from setuptools import setup setup( name= 'kontent_flask' , packages=[ 'sample' ], include_package_data= True , install_requires=[ 'flask' , ], )
- プロジェクトのルートでconfig.py - config.pyは、Python SDKのために推奨される正しいKontentプロジェクトを対象とします。注:表示されているconfig.pyのプロジェクトIDは、共有サンプルサイトです。
project_id = '975bf280-fd91-488c-994c-2f04416e5ee3'
delivery_options = { 'preview' : False , 'preview_api_key' : 'enter_key_here' , 'secured' : False , 'secured_api_key' : 'enter_key_here' , 'timeout' : ( 4 , 7 ) }
- __init __。py -Flaskアプリケーションオブジェクトを作成し、Kontent配信クライアントを初期化し、ビューをインポートします。
from flask import Flask import config from kontent_delivery.client import DeliveryClient app = Flask(__name__) client = DeliveryClient(config.project_id, options=config.delivery_options) import sample.home.views
- home / views.py -CMSからコンテンツを取得し、「/」ルートがヒットすると、変数としてホームテンプレートに渡します。
from flask.templating import render_template from sample import app, client @app.route( '/' )
def index ():
resp = client.get_content_item( 'home' ) if resp: hero_units = resp.get_linked_items( 'hero_unit' ) hero = hero_units[ 0 ] articles = resp.get_linked_items( 'articles' ) return render_template( 'home/index.html' , hero=hero, articles=articles) # custom 404 page information available at:
# https://flask.palletsprojects.com/en/2.0.x/errorhandling/?highlight=404#custom-error-pages
return render_template( 'error_pages/404.html' ), 404
ステップ4:テンプレートロジックを追加する
- templates /base.html-サイトのレイアウトHTMLを含むテンプレートラッパー
< html >
< head id = 'head' >
{% block head %} < meta name = 'viewport' content = 'width=device-width, initial-scale=1' />
< meta charset = 'UTF-8' />
< title > Flask Sample title >
{% endblock %} head >
< body >
< div class = 'container' >
{% block content %} {% endblock %} div >
body >
html >
- templates / home / index.html -home /views.pyから渡された変数を使用する「/」ルート上のテンプレート。
{% extends 'base.html' %} {% block content %} < h1 > Flask Simple Example h1 >
< h2 > {{ hero.elements.title.value }} h2 >
< div >
{% for article in articles %} < div >
< div >
< h2 >
< a href = '/articles/{{article.elements.url_pattern.value}}' >
{{ article.elements.title.value }} a >
h2 >
< p >
{{ article.elements.summary.value }} p >
< div >
{{ article.elements.post_date.value }} div >
div >
div >
{% endfor %} div >
{% endblock %}
ステップ5:サイトを実行する
- ターミナルで、FLASK_APP環境変数を
set FLASK_APP=sample
-
pip install -e .
を使用してアプリケーションパッケージをインストールします。 (期間を含む) - アプリケーションを実行します:
flask run

ターミナルからFlaskアプリケーションリンク(デフォルトではhttp://127.0.0.1:5000 )をたどると、Kontent + Flaskサイトに移動します。 Kontentアカウントをお持ちで、独自のサンプルKontentプロジェクトでこれをテストする場合は、次の手順に従ってください。
このサンプルの完全なコードは、 このGitHubrepositoryで確認できます。
結論
この記事では、ヘッドレスCMSでFlaskを使用する利点と、Flask + KenticoKontentサンプルプロジェクトを作成する方法について説明しました。ヘッドレスCMSでマイクロフレームワークを使用すると、大きな柔軟性が得られることに同意していただけると思います。
この記事でFlaskとKenticoKontentを使用する可能性に興奮した場合は、より堅牢なFlask + Kontentサンプルサイトをここで確認できます。
記事のフラスコサンプルに問題がありますか?私たちの不和に連絡してください。