【Python初心者向け】Djangoとは?Webアプリ開発の始め方を完全解説

python

「PythonでWebアプリを作りたいけど、何からはじめればいいのかわからない…」

そんな悩みを持つ人におすすめなのが、Django(ジャンゴ)というフレームワークです。

Djangoは、Pythonで開発されたWebフレームワークの中でも特に人気があり、初心者からプロまで幅広くつかわれています。

この記事では、Djangoの特徴から基本的なつかい方、学習ステップまでをわかりやすく紹介します。

スポンサーリンク

Djangoってなに?

説明

DjangoはPython製のWebアプリケーションフレームワークで、2005年にリリースされました。

フレームワークとは、「アプリを作るための土台や道具がセットになったもの」です。

家を建てるときの「基礎工事や設計図」のようなものだと考えてください。

Djangoの特徴

「電池付き」フレームワーク

  • 認証システム(ログイン機能)
  • 管理画面
  • ルーティング(URLの処理)
  • フォーム処理
  • セキュリティ対策

これらがすべて最初から入っているので、すぐにWebアプリ開発をはじめられます

MTV アーキテクチャ

Djangoは「MTV」という設計思想を採用しています:

要素役割
Model(モデル)データの管理ユーザー情報、記事データ
Template(テンプレート)見た目の設計HTML、CSS
View(ビュー)処理のロジックデータを取得して表示

この分離により、コードが整理され、メンテナンスしやすくなります。

Djangoをつかっている有名サービス

  • Instagram:写真共有SNS
  • Pinterest:画像ブックマークサービス
  • Spotify:音楽ストリーミング(一部)
  • YouTube:動画共有(一部)

このように、大規模なサービスでも安心してつかえる実績があります。

Djangoのインストールと環境準備

事前準備

Pythonのインストール確認

まず、あなたのパソコンにPythonがインストールされているか確認しましょう。

python --version

Python 3.8以上が推奨です。インストールされていない場合は、Python公式サイトからダウンロードしてください。

Djangoのインストール

ステップ1:仮想環境の作成(推奨)

# 仮想環境を作成
python -m venv myenv

# 仮想環境を有効化(Windows)
myenv\Scripts\activate

# 仮想環境を有効化(Mac/Linux)
source myenv/bin/activate

ステップ2:Djangoのインストール

pip install django

ステップ3:インストール確認

django-admin --version

バージョン番号が表示されれば、インストール成功です。

最初のDjangoプロジェクトを作ってみよう

プロジェクトの作成

ステップ1:プロジェクトを作成

django-admin startproject mysite

これで「mysite」という名前のプロジェクトフォルダが作成されます。

ステップ2:プロジェクトフォルダに移動

cd mysite

ステップ3:開発サーバーを起動

python manage.py runserver

ステップ4:ブラウザで確認

ブラウザで http://127.0.0.1:8000/ を開くと、Djangoのウェルカム画面が表示されます。

プロジェクトの構造

作成されたフォルダ構造は以下のようになります:

mysite/
    manage.py          # Djangoのコマンドを実行するファイル
    mysite/
        __init__.py
        settings.py    # プロジェクトの設定
        urls.py        # URLの設定
        wsgi.py        # サーバー設定
        asgi.py        # 非同期サーバー設定

最初のアプリケーションを作ってみよう

説明

Djangoでは「プロジェクト」の中に「アプリケーション」を作ります。

  • プロジェクト:Webサイト全体
  • アプリケーション:特定の機能(ブログ、ユーザー管理など)

アプリケーションの作成

ステップ1:ブログアプリを作成

python manage.py startapp blog

ステップ2:アプリをプロジェクトに登録

mysite/settings.py を開いて、INSTALLED_APPS に追加:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',  # ここに追加
]

Hello World を表示してみよう

ステップ1:ビュー関数を作成

blog/views.py を開いて編集:

from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello, Django World!")

def index(request):
    return HttpResponse("""
    <h1>私のブログへようこそ!</h1>
    <p>これはDjangoで作成したページです。</p>
    """)

ステップ2:ブログ用のURLを設定

blog/urls.py を新規作成:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('hello/', views.hello, name='hello'),
]

ステップ3:メインのURLに接続

mysite/urls.py を編集:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
]

ステップ4:サーバーを再起動して確認

python manage.py runserver
  • http://127.0.0.1:8000/ → ブログのトップページ
  • http://127.0.0.1:8000/hello/ → Hello Worldページ

データベースとモデルの基本

説明

Djangoでは、Pythonのクラスでデータベースのテーブル(モデル)を定義できます。

これにより、SQLを書かずにデータベースを操作できます。

ブログ記事のモデルを作ってみよう

ステップ1:モデルを定義

blog/models.py を編集:

from django.db import models
from django.utils import timezone

class Post(models.Model):
    title = models.CharField(max_length=200, verbose_name="タイトル")
    content = models.TextField(verbose_name="内容")
    created_at = models.DateTimeField(default=timezone.now, verbose_name="作成日時")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="更新日時")

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = "記事"
        verbose_name_plural = "記事一覧"

ステップ2:データベースに反映

# マイグレーションファイルを作成
python manage.py makemigrations

# データベースに反映
python manage.py migrate

ステップ3:管理者ユーザーを作成

python manage.py createsuperuser

ユーザー名、メールアドレス、パスワードを入力します。

ステップ4:管理画面に登録

blog/admin.py を編集:

from django.contrib import admin
from .models import Post

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ['title', 'created_at', 'updated_at']
    list_filter = ['created_at']
    search_fields = ['title', 'content']

ステップ5:管理画面で記事を作成

  1. サーバーを起動:python manage.py runserver
  2. http://127.0.0.1:8000/admin/ にアクセス
  3. 作成したユーザーでログイン
  4. 「記事」から新しい記事を作成

ブログ記事を表示してみよう

テンプレートの作成

ステップ1:テンプレートフォルダを作成

blog/
    templates/
        blog/
            index.html
            detail.html

ステップ2:一覧ページのテンプレート

blog/templates/blog/index.html を作成:

<!DOCTYPE html>
<html>
<head>
    <title>私のブログ</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 40px; }
        .post { border: 1px solid #ddd; padding: 20px; margin: 20px 0; }
        .title { color: #333; }
        .date { color: #666; font-size: 14px; }
    </style>
</head>
<body>
    <h1>私のブログ</h1>
    
    {% for post in posts %}
        <div class="post">
            <h2 class="title">{{ post.title }}</h2>
            <p class="date">{{ post.created_at|date:"Y年m月d日 H:i" }}</p>
            <p>{{ post.content|truncatewords:30 }}</p>
            <a href="{% url 'post_detail' post.id %}">続きを読む</a>
        </div>
    {% empty %}
        <p>まだ記事がありません。</p>
    {% endfor %}
</body>
</html>

ステップ3:詳細ページのテンプレート

blog/templates/blog/detail.html を作成:

<!DOCTYPE html>
<html>
<head>
    <title>{{ post.title }} - 私のブログ</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 40px; }
        .date { color: #666; font-size: 14px; }
        .content { line-height: 1.6; margin: 20px 0; }
    </style>
</head>
<body>
    <h1>{{ post.title }}</h1>
    <p class="date">{{ post.created_at|date:"Y年m月d日 H:i" }}</p>
    <div class="content">
        {{ post.content|linebreaks }}
    </div>
    <a href="{% url 'index' %}">← 一覧に戻る</a>
</body>
</html>

ビューの更新

blog/views.py を更新:

from django.shortcuts import render, get_object_or_404
from .models import Post

def index(request):
    posts = Post.objects.all().order_by('-created_at')
    return render(request, 'blog/index.html', {'posts': posts})

def post_detail(request, post_id):
    post = get_object_or_404(Post, id=post_id)
    return render(request, 'blog/detail.html', {'post': post})

URLの更新

blog/urls.py を更新:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('post/<int:post_id>/', views.post_detail, name='post_detail'),
]

これで、ブログの一覧ページと詳細ページが完成しました!

よくある質問

Q:DjangoとFlaskのちがいは?

Django

  • 多機能(電池付き)
  • 大規模開発向け
  • 学習コストが高め

Flask

  • シンプル・軽量
  • 小規模開発向け
  • 学習コストが低め

Q:データベースは何をつかえる?

Djangoは以下のデータベースに対応:

  • SQLite(開発時の標準)
  • PostgreSQL(本番環境推奨)
  • MySQL
  • Oracle

Q:本番環境にデプロイするには?

主なデプロイ先:

  • Heroku:簡単デプロイ
  • AWS:本格的なクラウド環境
  • さくらのクラウド:国内サービス
  • Railway:新しいPaaS

まとめ

Djangoの魅力

  • 電池付き:すぐに開発できる環境が整っている
  • 管理画面が強力:自動でデータベースをGUI管理できる
  • 拡張性が高い:大規模開発にも対応可能
  • セキュリティが堅牢:セキュリティ対策が標準で組み込まれている
  • コミュニティが活発:情報が豊富でサポートが充実

コメント

タイトルとURLをコピーしました