16
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【図解】Djangoチュートリアル備忘録 - プロジェクト構造とデータフローについて

Last updated at Posted at 2025-04-16

はじめに

新卒エンジニアが会社の研修で勉強した内容を図でまとめてみました。
今回はdjangoについてです。

プロジェクト構造とデータフロー

Djangoチュートリアル備忘録.png

解説

Djangoチュートリアル備忘録 (3).png

Djangoとは

Djangoは、Pythonで書かれた高機能なWebアプリケーションフレームワークです。「バッテリー同梱(batteries included)」の思想を持ち、Web開発に必要な機能が標準で揃っているのが特徴です。

ページ表示までのデータフロー

Djangoでは、ユーザーのリクエストから応答までが以下の流れで処理されます:

  1. URLアクセス: ユーザーがブラウザからリクエスト送信
  2. URLディスパッチャ (urls.py): URLパターンを照合し、適切なビューを選択
  3. ビュー (views.py): リクエスト処理とビジネスロジックの実行
  4. モデル (models.py): データの取得・操作(必要な場合)
  5. テンプレート (.html): 表示用HTMLを生成
  6. レスポンス: 生成されたHTTPレスポンスをユーザーに返す

リクエスト処理サイクル

  1. ユーザーがブラウザからリクエスト送信
  2. WSGIサーバーがリクエストを受け取りDjangoに渡す
  3. ミドルウェアがリクエストを前処理
  4. URLディスパッチャがURLパターンを照合し適切なビューを選択
  5. ビューがデータベースからデータを取得・処理
  6. ビューがテンプレートにデータを渡す
  7. テンプレートがHTMLを生成
  8. ビューがHTTPレスポンスを返す
  9. ミドルウェアがレスポンスを後処理
  10. WSGIサーバーがレスポンスをユーザーに返す

WSGI と ASGI

  • WSGI (Web Server Gateway Interface): Webサーバーとアプリケーション間の標準インターフェース
  • ASGI (Asynchronous Server Gateway Interface): 非同期処理に対応した新しいインターフェース

実際の使い分け

  • wsgi.py: 従来のHTTPリクエスト/レスポンスモデルのみを扱う場合
  • asgi.py: WebSocketなどのリアルタイム機能や非同期処理を活用する場合

Djangoのメリット

  • 必要な機能が最初から揃っている
  • モデル定義さえすれば管理画面が自動生成される
  • セキュリティが高い
  • データベースの操作が容易(ORM)
  • スケーラビリティに優れた設計

DB関連概念

  • スキーマ: DBのテーブルやカラム等の構造定義
  • ORM (Object-Relational Mapping): SQLを直接書かずに、プログラミング言語のオブジェクトでデータベースを操作する技術
  • マイグレーション: DBの変更履歴をファイルに記録し、その履歴を元にDBスキーマを更新していく手法



Djangoチュートリアル備忘録 (2).png

図に示されているディレクトリ名やファイル名(django-tutorial-prj、mysite、polls等)はあくまで例示であり、実際のプロジェクトでは開発者が任意の名前を付けることができます。Djangoの規約に従う限り、プロジェクト構造の基本的な階層と機能は維持されます。

ルートディレクトリ

例では django-tutorial-prj となっていますが、任意の名前を付けることができます。プロジェクト全体を格納するディレクトリです。

プロジェクト設定パッケージ

例では mysite/ となっていますが、実際には django-admin startproject コマンド実行時に指定した任意の名前になります。このディレクトリには以下のファイルが含まれます:

  • __pycache__/: Pythonのバイトコードキャッシュ用ディレクトリ
  • __init__.py: このディレクトリをPythonパッケージとして認識させるファイル
  • asgi.py: ASGIサーバー用のエントリーポイント
  • settings.py: プロジェクト全体の設定を管理
  • urls.py: プロジェクトレベルのURL設定
  • wsgi.py: WSGIサーバー用のエントリーポイント

アプリケーション

例では polls/ となっていますが、python manage.py startapp コマンド実行時に指定した任意の名前になります。一つのプロジェクトに複数のアプリケーションを含めることができます。アプリケーションディレクトリには:

  • __pycache__/: バイトコードキャッシュ
  • migrations/: データベースマイグレーションファイル
  • static/: 静的ファイル(CSS、JavaScript、画像など)
  • templates/: HTMLテンプレートファイル
  • __init__.py: Pythonパッケージ化用ファイル
  • admin.py: Django管理サイトの設定
  • apps.py: アプリケーション設定
  • models.py: データモデル定義
  • tests.py: テストコード
  • urls.py: アプリケーションレベルのURL設定
  • views.py: ビュー関数/クラス

プロジェクトルートの重要ファイル

  • manage.py: Djangoプロジェクト管理用のコマンドラインユーティリティ
16
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?