前提
・Djangoとは何か? Djangoの全体像について解説していきます。
・これからPythonでWebアプリを作ってみたい入門者、IT初学者向けの記事です。
Djangoとは?
Djangoは、Python用のフレームワークです。
フレームワークとは、
画面から画面への移動や、データの登録、メール送信、基本的なセキュリティ設定など、よく使う機能があらかじめ用意されたツールです。
どうしてDjangoを使うの?
上でも述べたように、DjangoはWebアプリでよく使う機能があらかじめ用意してくれています。
Djangoを使うことで、開発者は頻繁に使う機能を1から作る手間がなくなります。
また、Djangoはオープンソースという無料で提供されているツールです。
無料で使えて手間が少なくなるのだから、PythonでWebアプリを作る際に使わない理由がありません。
Djangoの全体像
Djangoアプリは、1つのプロジェクト・ディレクトリと、複数のアプリケーション・ディレクトリから構成されます。
他にも様々な設定ファイルを持っていますが、まずはこの基本的な構成を覚えておきましょう。
TwitterなどのSNSをDjangoで作ったとしましょう。
SNSアプリ1つにつき、1プロジェクトで管理します。
SNSアプリは、
「会員登録機能」、「コメント投稿機能」、「いいね機能」などの、複数の機能を持っていますよね。
このそれぞれの機能が、各アプリケーションとなります。
(「アプリケーション1」は「会員登録機能」を管理し、「アプリケーション2」は「コメント投稿機能」を。。など)
このように、1つの機能をアプリケーションごとに管理することで、
プログラムの変更が容易になるというメリットがあります。
仮に全ての機能を1つのアプリケーションに詰め込んだ場合、
数週間・数ヶ月後には、「あれ。。あの機能はどのファイルの、どの辺に書いたんだっけ?」となってしまうことがあります。
そのような事態にならないためにも、機能毎に1ディレクトリ(アプリケーション)でまとめると、管理がしやすくなります。
企業などで複数人で開発を行う場合、
「Aさんは会員登録機能を作ってね」「Bさんはコメント投稿機能を」などと、
機能毎に担当者の役割を分ける際にも、この複数アプリケーションの構成は役立ちます。
1プロジェクト・複数アプリケーションの構成は、
個人で小規模なアプリケーションを作る分には、メリットを感じにくいかもしれませんが、
集団開発やコードの量が数千〜数万におよぶ大規模なシステム開発の場合、効果を実感しやすいかと思います。
Djangoアプリの処理の流れ
Djangoで開発したWebアプリを、ユーザーがSafariやChromeなどのブラウザで操作した際の流れについて、説明したいと思います。
以下の図は、あるDjangoで開発されたWebサイトで、ユーザーが会員登録した際、システム内でどのような処理が行われるかを表しています。
自分が良く使うSNSやショッピングサイトで、会員登録した時のことを思い出しながら、処理の流れを追って見てください。
-
ユーザーがブラウザから、Webサイトの登録ページにアクセス。その後、名前やメールアドレスなど必須項目を入力し、画面上の登録ボタンを押します。この際、「会員登録よろしく!」というリクエストが、システム側に飛びます。
-
飛んできたリクエストを、プロジェクトのルーティングが受け取ります(ルーティングは、プロジェクトとアプリケーションの2つに分類できる)。プロジェクトのルーティングは、リクエストの種類によって、どのアプリケーションに情報を伝えるかを判断します。今回は、会員機能を司る「アプリケーション1」に、「会員登録のリクエストがあったよ」と情報を伝えます。
-
プロジェクトのルーティングからの情報を、アプリケーションのルーティングが受け取ります。今回は、会員機能の中でも会員登録を担当する「ビュー1」に情報を伝えます。
-
「ビュー1」はフォームにユーザーの会員情報を伝えます。フォームは受け取った情報のバリデーション(正しい値が入力されているかのチェック)を行います。
-
フォームはバリデーションの結果を「ビュー1」に返します。ここまでの処理に問題がなければ、入力データをデータベースに入れる準備が整います。
-
「ビュー1」はモデルにユーザーの会員情報を伝えます。モデルは、データベースとのやりとりを担当するところです。
-
モデルは「ビュー1」から受け取った情報をデータベースに「この情報を登録して!」と伝えます。
-
データベースは登録処理の結果をモデルに伝えます。
-
モデルはデータベースから受け取った情報を「ビュー1」に伝えます。
-
「ビュー1」はモデルから受け取ったデータベースからの情報を元に、テンプレートがブラウザの画面を作成します。
-
テンプレートは作成した画面を返します。
-
リクエストに対する返答(レスポンス)として、画面を返します。これでユーザーは会員登録が完了し、WebサービスによってはTOPページに移動したり、「登録が完了しました!」などとメッセージ画面が表示されます。
ここまで、Djangoの主な処理の流れとなります。
※処理によっては、フォームやモデルは使われないこともあります。例えばデータを登録する必要のないサービスで、単純でページ移動をする場合など。
Djangoを構成する部品
ここで先ほど出てきた5つの部品(コンポーネント)の役割を、一つずつまとめたいと思います。
ルーティング
ユーザーからのリクエストを、担当のビューに伝える。会員登録に関してはビュー1、コメント投稿機能に関してはビュー2、などと。
ルーティングは主にプロジェクトのルーティングと、アプリケーション毎のルーティングがある。
ビュー
各コンポーネントの橋渡しを行う。アプリケーションの中心的な役割を果たす。
フォーム
ユーザーが画面で入力した値をDjango内部で保持します。また、入力された値が正しいか、チェックを行います。名前や住所は全角か、文字数制限を超えていないか、メールアドレスには@が入っているか、パスワードはアルファベットと数値が含まれているか、、など。
ちなみに入力値のチェックをバリデーションといいます。
モデル
データベースとのやり取りをしてくれる。
モデルを使うことで、SQL(データベースを操作する言語)を書くことなく、Pythonでデータベースの操作(データの登録、更新、削除など)が行えます。
テンプレート
画面を作成する。
データベースから取得した情報をビューから受け取り、それを元に画面を生成したりします。
例えばAmazonのようなショッピングサイトなどで、ユーザーごとに購入履歴の画面の表示が違ってたりしますよね。
あのような画面も、データベースに登録されているデータを元に、それぞれのユーザーの画面を作ってたりします。
まとめ
- Djangoは、Python用のフレームワーク。
- フレームワークはあらかじめよく使われる機能を用意してくれているため、オリジナルの機能に注力でき、開発の効率が上がる。
- Djangoは1つのプロジェクトと複数のアプリケーションから構成される。
- Djangoは役割毎に5つの部品に分けられる(ルーティング、ビュー、フォーム、モデル、テンプレート)
処理の流れは文章だけだと正直分かりにくいと思うので、実際に何か作ってみるのが理解しやすいと思います。