私はプログラマーでも何でもないですが、Webアプリについて勉強することがあり、簡単なアプリをふわっと作れるようになってきた似非エンジニアです。そんな初心者視点での理解も参考になればと思い、簡単なイメージをまとめました。
Djangoにおけるリクエストの流れとアーキテクチャ
Djangoにおいて、プログラム初心者の私の理解をまとめました。
一つじゃないよってことを理解するのに役立てばと思います
① 一つのサーバに全部構築
例えばDjangoをフルスタックで使う場合
HTML ⇒ ボタン ⇒ view.py ⇒ models.py ⇒DB
ユーザーがブラウザ上でボタンをクリックしたり、フォームを送信したりすると、リクエストがサーバに送られます。
そのリクエストは view.py
で受け取り、処理を行った後に、データベースの操作(保存や取得)を models.py
で行います。
- models.py: データベースの操作を担当します。DjangoのORM(Object-Relational Mapping)を使用して、データの保存や取得を行います。
-
view.py: ユーザーからのリクエストを受け取り、適切なレスポンスを返します。ビューは、必要に応じて
models.py
を利用してデータベースの操作をします。
この流れでは、サーバがリクエストを受けてレスポンスを返す単純な構造となります。
② 一つのサーバに全部構築(フォームデータ処理)
HTML ⇒ ボタン ⇒ forms.py ⇒ view.py ⇒ models.py ⇒DB
この流れは、フォームデータを扱う場合に適しています。forms.py
は、ユーザーが入力したフォームデータを検証したり、整形したりする役割を持っています。
- ユーザーがフォームを送信すると、
forms.py
がそのデータを受け取ります。 -
forms.py
では、バリデーションやクリーニングを行い、適切なデータに変換します。 - 次に、
view.py
でそのデータを処理し、最終的にmodels.py
を通じてデータベースに保存します。
この流れは、ユーザーからのデータ入力を処理する際に非常に便利です。forms.py
を使うことで、コードが整理され、フォームの処理が簡潔に行えるようになります。
③ フロントエンドとバックエンドを分ける(APIアーキテクチャ)
フロントエンド
HTML ⇒ ボタン ⇒ JavaScript (fetch関数) ⇒ JSONペイロードに乗せる
バックエンド
router ⇒ JSONをシリアライズ(serializer.py) ⇒ models.py ⇒DB
この流れは、フロントエンドとバックエンドを分けて、APIを使った通信を行う構成です。フロントエンドがユーザーインターフェースを担当し、バックエンドがデータの処理を担当します。
-
フロントエンド: HTMLとJavaScriptを使ってユーザーインターフェースを構築し、ボタンをクリックすると
fetch
関数を使ってAPIリクエストを送信します。このリクエストは、JSON形式でデータをサーバに送信します。 -
バックエンド: サーバ側では、
router
とview
がAPIのエンドポイントを提供します。受け取ったデータはserializer.py
でJSONに変換され、データベースに保存されます。
このアーキテクチャは、モダンなWebアプリケーションでよく使われる構成です。フロントエンドとバックエンドが疎結合になっており、データのやり取りがJSONで行われるため、柔軟性が増します。特に、モバイルアプリケーションや他のサービスと連携する場合に便利です。
結論
初心者ながらまとめてみました。
本当の初心者はいくつもwebアプリのアーキテクチャがあることに戸惑います。
だいぶ理解が進んできたので、まとめてみました。
③についてはちょっと怪しい部分があるのでまた整理してきます。