インフォメーション
本記事は独自で勉強した内容のアウトプットになります。
どうも初めましてエンジニアを目指して勉強中のsteveです。
Djangoを勉強して約二か月経過したので、ここでは,Djangoの概説を説明したいと思います。
はじめに -WebサイトとWebアプリの違いとは?-
簡潔にまとめると、responseするHTMLが動的ならwebアプリ、静的ならwebサイトになります
したがって、ユーザーによって動的に異なったwebページを返せるdjangoは、webアプリになります。
webアプリの処理手順
キーワードは、webサーバー,APサーバー、データベースになります。
Webサーバー・・・クライアントから受け取るリクエストの窓口
APサーバー・・・必要に応じてデータベースと連携をとりレスポンスデーターを作成
データベース・・・データを保管しているサーバー
- 処理1 ブラウザからwebアプリにリクエストを送る
- 処理2 WEBサーバーが窓口としてリクエストを受け取り、レスポンスに必要なのが、静的コンテンツなのか、動的コンテンツなのか判断
- 静的コンテンツであれば、処理4へ
- 動的コンテンツであれば、処理3へ
- 処理3 APサーバーで処理
- データベースからのデータの取得が必要であれば、データベースと連携し、レスポンスデータを作り、WEBサーバにデータを返す。
- 処理4 WEBサーバーからレスポンスデータをブラウザに返す
Djangoでは、処理2、処理3をどのように走らせるかを設定するというわけです。
Djangoはどのように処理2、処理3を実行するのか
キーワードは、次の3個です
Model・・・データベースと連携をとるコンポーネント
Template・・・一般にhtmlファイルのことをさします
View・・・modelから参照したデータをどのように扱うか
(上記3つがメインのコンポーネントになるため、頭文字をとってMTVモデルと呼んだりします)
基本的に上記の3つを駆使して、リクエスト情報をさばいていくことになります。
この他にも処理1の部分は、urls.pyが担っているのですが、
djangoをwebアプリたらしめているための要素になってるのがMTVになります。
まず、処理1のリクエストがurls.pyで設定したアプリケーションに届く。
リクエストをurls.pyで指定したアプリケーションが処理する。
アプリケーションがレスポンスデータを返す。
では、アプリケーションはどのような処理をしてレスポンスデータを作成しているのでしょうか?? 以下からが本記事のメインテーマになります。
Djangoの裏側では、何がおこっているのか?
まず、リクエスト情報を受け取り最初に働くコンポーネントがviewになります。
viewは主に、「このリクエストがきたら、どのようにデータベースのデータを扱い、どのようにHTMLと絡みつけて、レスポンスデータを作成するのか」を設定する部分になります。
したがって、viewの設定により、どのデータベース(model)を扱うのか、どのhtml(template)を扱うのか を決めることができるので、viewはDjangoにおける脳のような役目をしているといえます。
modelは、データベースのテーブル作成をクラスベースの記述で設定できるコンポーネントになります。
templateは、htmlをどのように動的に表示するのか設定できるコンポーネントになります。具体的には、「もし、ユーザーがログイン状態なら、このデータを表示する」といった内容を、pythonの記述方法に近い方法で記述できます。
つまりまとめると、
viewがリクエストを受け取り、必要に応じてレコードをデータベースから取得し、表示するHTMLをtemplateから受け取る。レコードとhtmlの材料をもとに、viewが処理をしてレスポンスデータができあがる。
→処理4へ
これが全体的な動きになります!