Python/Flask
Flask

FlaskはPythonで書かれたマイクロウェブフレームワークです。 特定のツールやライブラリを必要としないため、マイクロフレームワークに分類されます。 データベースの抽象化レイヤーやフォームの検証など、既存のサードパーティライブラリが共通機能を提供するコンポーネントは存在しません。 しかし、Flaskは拡張機能をサポートしており、Flask自体に実装されているかのようにアプリケーションの機能を追加することができます。 オブジェクトリレーショナルマッパー、フォームバリデーション、アップロード処理、様々なオープン認証技術、いくつかの一般的なフレームワーク関連ツールのための拡張機能が存在します。
Flask

Flaskのインストールにはいくつかの方法があります。
Flask

Flaskのパッケージがあるオペレーションシステムでは、pip ではなく、パッケージマネージャーからFlaskと依存パッケージをインストールしましょう。 混在すると、OSのパッケージマネージャーと pip の間で管理情報に矛盾が生じアップデートなどに支障をきたすようになっていまいます。
Flask

多くの BSD UNIX は ports/pkgsrc/pkg で Flask をサポートしています。
Flask

portsレクションに www/py-flask があります。
Flask

ソースコードからインストール
Flask

バイナリーパッケージからインストール
Flask

Werkzeug や Jinja などの Flask が依存するパッケージも自動的にビルド/インストールされます。
Flask

また、静的なサイトを生成する www/py-frozen-flask もパッケージ化されています。
Flask

GNU/Linuxでは、ディストリビューションによってパッケージマネージャーや、パッケージアーカイブスが異なるので、お使いのパッケージマネージャーの利用方向に従ってインストールしてください。
Flask

を実行し、flask を名前に含むパッケージの一覧を表示し、その中から python3-flask を選びインストールします。
Flask

Fedora には、python3-flaskパッケージがあるので、 pip から flask をインストールすると、パッケージマネージャーで管理している依存パッケージ(Werkzeug や Jinja)と、 pip で管理している依存パッケージのバージョンが違ったりパスが違ったりする「キマイラ環境」ができてしまい、アップデートやアップグレードに支障を来たします。
Flask

ウェブアプリケーションを起動する前に、インストールが成功したか、またどのバージョンがインストールされたかを確認します。
サービスの起動方法

"Hello World" だけを返すウェブサービスをつくってみます。
サービスの起動方法

起動してみましょう。
サービスの起動方法

http://127.0.0.1:5000 を開いてみます(127.0.0.0/8は、他のホストからはアクセスできないループバックインターフェースに割り当てられたアドレスです)。
サービスの起動方法

Flaskを実行中の端末には
サービスの起動方法

http://127.0.0.1:5000/no-exist を開いてみましょう。
サービスの起動方法

Flaskを実行中の端末には
サービスの起動方法

Flaskを実行中の端末でFlaskを強制終了します。
テンプレートの利用した動的なページ生成

Flaskは、Jinjaテンプレートエンジンと連携し、テンプレートベースの動的なウェブページの生成が可能です
テンプレートの利用した動的なページ生成

Flaskの既定のディレクトリーレイアウトでは、スクリプトのあるディレクトリーの下に、templates/ という名前のディレクトリーを掘り、そこにテンプレートを用意します。
テンプレートの利用した動的なページ生成

2つのテンプレートファイルと1つのスクリプトを用意します。
Jinja

Jinja は、Python で実装されたテンプレートエンジンで、Flaskウェブアプリケーションフレームワークの一部として提供されていますが、単体で使用することも可能です。
Jinja

{{ 式 }} でテンプレート中で変数(キーワード引数)や関数を参照できます。
Jinja

{% set 変数 = 値 %} でテンプレート中で変数に値を代入できます。
Jinja

{# コメント #}がJinjaテンプレートのコメントの構文で、出力には含まれません。
制御構造

Jinjaには、条件分岐と反復の制御構造があります。
改行の制御

は
改行の制御

と %} を -%} とすることで
マクロ

マクロ( macro )機能を使うと、繰返し使うフレーズをテンプレートの中で定義し、呼出しという形で再利用できます。
変数と型

Jinjaでは、Pythonのすべての組込み型を render_template() の引数として受取ることができ、反復構文を使うことで自由度の高いテンプレートを作ることができます。
テンプレートの継承

Jinjaでは、テンプレートを別のテンプレートから雛形として継承する事ができます。
テンプレートの継承

Example.html.jinja の block content
テンプレートの継承

ブロックは、マクロと異なり継承元では定義を行うだけで、展開は継承先だけで行なえます。また継承元も継承先も同じ開始タグと終了タグを使うので、多段継承(孫テンプレートを作ること)はできません。定義を blockdef、展開を blockref のように別の名前にすれば構文的には多段継承できますが、その場合「super()が何を表すのか」「循環継承が起こったらどうするか?」など意味論・運用論的な問題を多数生んでしまうので、多段継承を妨げたのは設計上のロバストな選択です。
テンプレートの継承

また、継承元で定義したマクロを、継承先で展開することはできます。
include

block と extends によるテンプレート継承が雛形だとすれば、include による包含は部品化です。
include

[TODO:コード例]
filter

filter には、式指向のフィルターとブロック指向のフィルターとがあります。
filter

[TODO:コード例]
Django

Flaskに次ぐシェア2位のPythonベースのウェブアプリケーションフレームワークにDjangoがあります。
Django

単独のページとして立項できる内容と信頼性を得るまで、Flaskの下におきました。
Django

Djangoのインストールにはいくつかの方法があります。
Django

Djangoのパッケージがあるオペレーションシステムでは、pip ではなく、パッケージマネージャーからDjangoと依存パッケージをインストールしましょう。 混在すると、OSのパッケージマネージャーと pip の間で管理情報に矛盾が生じアップデートなどに支障をきたすようになっていまいます。
Django

多くの BSD UNIX は ports/pkgsrc/pkg で Django をサポートしています。
Django

portsレクションに www/py-django があります。
Django

ソースコードからインストール
Django

バイナリーパッケージからインストール
Django

GNU/Linuxでは、ディストリビューションによってパッケージマネージャーや、パッケージアーカイブスが異なるので、お使いのパッケージマネージャーの利用方向に従ってインストールしてください。
Django

を実行し、django を名前に含むパッケージの一覧を表示し、その中から python3-django を選びインストールします。
Django

Djangoのバージョン確認の方法
Django

Django を使うには、コマンドラインを使う必要があります。
Django

まず、プロジェクトのディレクトリ群を作らないといけないのですが、さすがにこれは自動生成してくれるコマンドがあります。
Django

コマンド
Django

で、まずプロジェクトを作ります。
Django

上記コマンドを使えば、Django用のプロジェクトのディレクトリを自動生成してくれます。
Django

たとえば、 「projtest」というプロジェクトを作るなら
Django

になるわけです。
Django

そして、このプロジェクト内でこれから作業するので、移動コマンドcdを使い、
Django

で、さきほど作成したプロジェクトのディレクトリ内に移動します。
Django

コマンド
Django

を使うと、Django の ウェブサーバーが立ち上がります。
Django

ウェブブラウザで、
Django

でアクセスできます。
Django

まだ何もユーザー側でHTMLを作っていないので、初期設定のHTMLページが表示されるので、表示ページには英文およびロゴマークでロケットの打ち上げ絵が書かれています。水色っぽいロケットの打ち上がってるイラストが出たら、とりあえず、ここまでの作業は成功です。
Django

サーバ立ち上げのコマンドの冒頭は、 django-admin ではなく Python ですので、間違えないようにしましょう。なんでここだけPythonなのか謎ですが、そういう仕様なので、従うしかありません。
Django

なお、自動作成ずみのプロジェクト用ディレクトリ内にすでに manage.py というスクリプトがあり、それを上記コマンド Python manage.py runserver で実行している仕組みです。
Django

なお、サーバを終了するには、CTRLキー を押しながら C を押します。(Flaskと同じ終了コマンド)
Django

次回以降のサーバの立ち上げは
Django

になります。
Django

では、これからホームページを作りましょう。Djangoではホームページは「アプリ」に分類されるので、コマンド
Django

で、まずDjangoアプリを作ります。
Django

このコマンドを実行する場所は、どこでもいいのですが、プロジェクト内でしたほうがラクなので、中で作成した場合、コマンドライン画面は
Django

のようになります。
Django

今回、最終的に作りたいのはホームページなので、たとえば「hptest」というアプリ名を作ったとしましょう。
Django

Django用ディレクトリ内に自動作成されたアプリ名ディレクトリの中に
Django

というファイル名と上記のコード内容のファイルがありますので、それをマウスで右クリックして、普通に開き、これから編集することで、ホームページ作成する仕組みです。
Django

これを編集し、下記のような関数を付け足します。関数名(func)とその引数(arg)は自由に設定できますが、「render」はそのままにしてください。
Django

書式はもちろん
Django

です。
Django

次に、プロジェクト名と同名のディレクトリが、プロジェクトに入った階層にあるので、その同名ディレクトリに、マウスで移動します。 そして、その同名ディレクトリ内に、urls.py というファイルが存在し、↓のほうに、下記のようなコードが書かれています。
Django

このファイルのこのコード部分を下記のように書き換えます。
Django

次に、アプリ側に、urls.py という同名のファイルを作りますが(初期設定では用意されてないので、ファイルを新規作成してください)、中身は別です。下記のようなコードをアプリ側に書きます。
Django

そして、さらに、「templates」ディレクトリを作り、そこに最終的に表示したいHTMLを入れます。このディレクトリ名は、必ず「templates」でないといけません。(アプリ側 urls.py のコード中のpath('templates/', といっしょに別ディレクトリ名に書き換えて違うディレクトリ名にしても、エラーになります。なので、必ず「templates」というファイル名にしてください。)
Django

の第一引数の部分は、ウェブブラウザなどで「templates」のメッセージが送られた場合に、テンプレートディレクトリにあるファイルで対応する事を言っています。
Django

なので、たとえば、第一引数を別名にして
Django

のようにしても、ウェブブラウザでのアクセス時にURL欄に
Django

と入力すると、ブラウザからtemplatesディレクトリ内のHTMLなどにアクセスできてしまいます。ですが、まぎらわしいので、第一引数は「templates」のままに、しておいてください。
Django

このtemplatesディレクトリに入れるHTMLには、とりあえず、
Django

と書いてあるとしましょう。
Django

さらに、プロジェクト側にある setting.py に、INSTALLED_APPS という項目があり、最初は
Django

と書かれていますが、これに私達の作成するアプリ名をつけたすことで、そのアプリが追加されたことを知らせます。
Django

あとは、サーバを立ち上げて、ウェブブラウザで
Django

にアクセスすれば、HTMLファイルの内容が表示されます。(上述のコード例の場合なら、 http://localhost:8000/hptest/templates/ にアクセスする事になります。 )
Django

大きな文字で
Django

と表示されれば成功です。
Django

Django では、ログインページそのものを自動作成する機能もあり Auth といいますが、設定が必要です。
Django

これとは別に、ログインページでよく使いそうな、Eメールアドレス入力フォームや、会員サイトでの入会時の生年月日の登録などで使いそうな年月日入力フォームなど、各種の入力フォームを、テンプレートで自動作成する機能があり、Formクラスと言います。
Django

Eメール入力フォームなら、メールアドレス形式以外の文字列が入力されても、送信を禁止します。このように、入力内容を自動的に検査することを「バリデーション」といいます。Formクラスを使うと、バリデーションの機能を使えます。
Django

また、その他の一般のDjangoの入力フォームでも、入力時の必須項目などを設定できます。たとえば、登録ページでユーザー名が未入力なのに「送信」ボタンの押された場合には、「この項目を入力してください」のような警告メッセージを、ウェブページ上で出させて、送信させないでユーザーに再入力させる事ができます。
Django

Djangoなどのフルスタックウェブアプリケーションフレームワークを使う利点として、サーバー製作者は上述のように、入力欄のチェック機能を自作する手間が省けます。
Django

いきなりログインページを作っても、複雑で理解が浅くなってしまうので、まずは、リンクで結ばれている複数のHTMLページをアップロードする方法を学びましょう。
Django

templates にHTMLファイルが2つあるとして、
Django

というファイルがあるとしましょう。
Django

まず、これをアップロードするために、コードを下記のように書き換えます。
Django

なお、(アプリ側でなく)プロジェクト側 urls.py の抜粋はそのままにしておきます。
Django

さて、views.pyに、2ページ目のHTMLのための関数を追加する必要があります。
Django

そして、それぞれのHTMLファイルには
Django

と書いてあるとしましょう。
Django

説明の簡単化のため、まです、各種の Django テンプレートは使わないでおきましょう。
Django

これだけすれば、とりあえず、ウェブブラウザで、
Django

にアクセスすれば、1ページ目を表示できます。
Django

そして、ブラウザに表示されたリンク文をクリックすれば、2ページ目に移動できます。
Django

2ページ目に移動したとき、アドレス欄の末尾が、きちんと2ページ目のファイルである testpage2 に変わっている事を確認しましょう。つまり、
Django

というふうに、なっているハズです。
Django

とりあえず、これで読者のアナタは、Djangoに複数のHTMLページをアップロードする事ができました。
Django

では、今度はHTMLファイルのリンクを、Djangoテンプレートタグの一種である URLテンプレートタグ を使って書き換える方法を学びましょう。
Django

単に、1ページ目のhrefタグの引数を、下記のようにurlテンプレートタグを使って書き換えるだけです。なお、前回との表示の区別のため、下記コードでは表示される文章を少々、追加してあります。
Django

参考のため、2ページ目のHTMLも再掲しておきます。
Django

あとはもう、
Django

にアクセスすれば、前回と同様のアクセス結果になります。