Djangoフレームワーク入門:基本概念とプロジェクト構築

ウェブフレームワークとDjangoの基本概念

ソフトウェア開発におけるクライアント/サーバー(C/S)アーキテクチャは、現代のウェブアプリケーション開発の基盤です。HTTPプロトコルとSQL言語の発展により、統一されたインターフェースと標準が確立されました。

HTTPプロトコルの基礎

  1. HTTPの四大特性
    • TCP/IPプロトコルに基づき、アプリケーション層で動作する
    • リクエスト/レスポンスモデルに基づく
    • ステートレス(状態を保持しない)- cookie、session、tokenなどの解決策
    • コネクションレス - WebSocketのような長期接続の必要性
  2. データ形式
    • リクエスト形式: リクエスト行、リクエストヘッダー、リクエストボディ
    • レスポンス形式: ステータス行、レスポンスヘッダー、レスポンスボディ
  3. ステータスコード

    数字コードによってHTTPリクエストの結果を表現

純粋Pythonによる簡易Webフレームワークの構築

まず、Pythonの標準機能のみを使用して基本的なWebフレームワークを実装してみましょう。

Djangoの主要コンポーネント

  • views.py: ビューハンドラ関数を格納。ビューレイヤーとして機能
  • urls.py: URLパターンとビューハンドラの対応関係を定義。ルーティングレイヤー
  • templatesディレクトリ: HTMLテンプレートファイルを格納。テンプレートレイヤー

静的ページと動的ページの違い

  • 静的ページ: データが固定され、手動で変更が必要
  • 動的ページ: データが動的に取得される
    • 例1: サーバー側で現在時刻を動的に取得
    • 例2: データベースからクエリしたデータを表示

実践課題

  1. 現在時刻を表示するページの作成
  2. ユーザーデータ辞書を表示し、テンプレート内で操作可能にする

jinja2テンプレートエンジン

jinja2は、サーバーサイドデータとHTMLページの相互作用を処理するための強力なテンプレートエンジンです。

基本的なテンプレート構文

jinja2構文はPythonの構文に非常に近く、HTML内でサーバーデータを操作できます。

テンプレートのレンダリングプロセス

テンプレートのレンダリングは、サーバー側でHTMLファイルを完全に生成するプロセスです。フロントエンドとは無関係にサーバー側で処理されます。

Pythonの主要Webフレームワーク比較

フレームワーク 特徴 比較
Django 大規模で多機能、多くの組み込みコンポーネント 航空母艦のような巨大なフレームワーク
Flask 軽量で最小限、サードパーティコンポーネントに依存 軽量兵士のようなフレームワーク
Tornado 非同期・非ブロッキング、ゲームサーバーにも利用可能 独自の実装を持つフレームワーク

Djangoフレームワークの詳細

インストールとプロジェクト作成

  1. Djangoのインストール確認:
    django-admin --version
  2. プロジェクト作成:
    django-admin startproject myproject
  3. プロジェクト起動:
    cd myproject
    python manage.py runserver
  4. アプリケーション作成:
    python manage.py startapp myapp

Djangoプロジェクト構造

  • プロジェクトルート
    • settings.py: 設定ファイル
    • urls.py: URLルーティング設定
    • manage.py: Djangoプロジェクト管理スクリプト
  • アプリケーションディレクトリ
    • migrations/: データベースマイグレーションファイル
    • admin.py: Django管理サイト設定
    • models.py: データモデル定義
    • views.py: ビューハンドラ関数
    • templates/: HTMLテンプレートファイル

アプリケーションの登録

作成したアプリケーションは、settings.pyINSTALLED_APPSに登録する必要があります。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp.apps.MyappConfig',
]

Djangoの基本的なレスポンス方法

HttpResponse

文字列を直接クライアントに返します。

from django.http import HttpResponse

def welcome(request):
    return HttpResponse("ようこそDjangoの世界へ!")

render

HTMLテンプレートをレンダリングして返します。テンプレートにコンテキストデータを渡せます。

from django.shortcuts import render

def user_profile(request):
    user_data = {'name': '田中太郎', 'email': 'tanaka@example.com'}
    return render(request, 'profile.html', {'user': user_data})

redirect

別のURLにリダイレクトします。

from django.shortcuts import redirect

def dashboard(request):
    # 内部リダイレクト
    return redirect('/home')
    
def external_redirect(request):
    # 外部サイトへのリダイレクト
    return redirect('https://www.djangoproject.com')

開発時の注意点

  • Djangoはファイル変更を検知すると自動的に再起動します
  • コード変更後は手動で再起動することをお勧めします
  • 同一ポートで複数のDjangoプロジェクトを同時に実行することはできません

タグ: Django Python Webフレームワーク HTTPプロトコル Jinja2

7月6日 00:01 投稿