ALLDOCUBE iPlay 70 mini Ultra タブレット 8.8インチ Snapdragon7+Gen3 2560×1600解像度 144Hz高リフレッシュレート 20GB+256GB+1TB拡張 7300mAh PD20W デュアルスピーカーDTSサウンド 6軸ジャイロ WiFi6 BT5.4 WidevineL1 重力センサー 光センサー Androidタブレットアンドロイド
(2025年4月25日 13:07 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)【国内正規品】MonsGeek(モンスギーク) FUN60 Pro SP 有線モデル HEセンサー 0.01mm ラピッドトリガー対応 磁気スイッチ Akko Glare Magnetic Switch 英語配列 テンキーレス サイドプリント 有線8K ホットスワップ SnapKeys (SOCD)対応 ARGB対応 高コスパ ゲーミングキーボード Black
¥5,980 (2025年4月25日 13:07 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)
はじめに
新卒エンジニアが会社の研修で勉強した内容を図でまとめてみました。
今回はdjangoについてです。
プロジェクト構造とデータフロー
解説
Djangoとは
Djangoは、Pythonで書かれた高機能なWebアプリケーションフレームワークです。「バッテリー同梱(batteries included)」の思想を持ち、Web開発に必要な機能が標準で揃っているのが特徴です。
ページ表示までのデータフロー
Djangoでは、ユーザーのリクエストから応答までが以下の流れで処理されます:
- URLアクセス: ユーザーがブラウザからリクエスト送信
-
URLディスパッチャ (
urls.py
): URLパターンを照合し、適切なビューを選択 -
ビュー (
views.py
): リクエスト処理とビジネスロジックの実行 -
モデル (
models.py
): データの取得・操作(必要な場合) -
テンプレート (
.html
): 表示用HTMLを生成 - レスポンス: 生成されたHTTPレスポンスをユーザーに返す
リクエスト処理サイクル
- ユーザーがブラウザからリクエスト送信
- WSGIサーバーがリクエストを受け取りDjangoに渡す
- ミドルウェアがリクエストを前処理
- URLディスパッチャがURLパターンを照合し適切なビューを選択
- ビューがデータベースからデータを取得・処理
- ビューがテンプレートにデータを渡す
- テンプレートがHTMLを生成
- ビューがHTTPレスポンスを返す
- ミドルウェアがレスポンスを後処理
- 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-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プロジェクト管理用のコマンドラインユーティリティ