ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
Django とは
Django は Python 製のフルスタック Web フレームワーク。「Don't Repeat Yourself」と「Batteries Included」が標語で、ORM・管理画面・認証・テンプレートエンジン・国際化など、Web アプリに必要な機能が標準で揃っています。Instagram / Pinterest / Mozilla 等の大規模サービスでも採用実績豊富。本記事では環境構築から最初のアプリ作成までを一通り解説します。
事前準備
| 項目 | 推奨 |
|---|---|
| Python | 3.10+ (Django 5.x は 3.10 以上必須) |
| OS | Windows / macOS / Linux 全て可 |
| DB | 開発は SQLite(標準)、本番は PostgreSQL 推奨 |
| 仮想環境 | venv(標準)/ Poetry / pipenv / conda |
| エディタ | VS Code / PyCharm |
仮想環境の作成
システム Python を汚さないため、必ず仮想環境を使います:
# プロジェクトディレクトリ
mkdir mysite && cd mysite
# 仮想環境作成
python -m venv .venv
# 有効化
source .venv/bin/activate # macOS / Linux
.\.venv\Scripts\activate # Windows PowerShell
.venv\Scripts\activate.bat # Windows cmd
# プロンプトが (.venv) に変わる
# 無効化(後で)
deactivate
Django インストール
# pip 更新
python -m pip install --upgrade pip
# 最新の Django
pip install django
# バージョン指定(LTS など)
pip install "django>=5.0,<6.0"
# 確認
python -m django --version
django-admin --version
# 開発用依存パッケージもまとめて
pip install django django-debug-toolbar djangorestframework python-dotenv
# requirements.txt に固定
pip freeze > requirements.txt
プロジェクト作成
# 「config」という名前のプロジェクトをカレントに作成(推奨)
django-admin startproject config .
# 末尾のドット忘れずに(しないと config/config/ という二重構造になる)
# 結果のディレクトリ構造
.
├── manage.py
└── config/
├── __init__.py
├── settings.py ← 設定ファイル
├── urls.py ← URL ルーティング
├── asgi.py
└── wsgi.py
プロジェクト名は「config」や「server」のような汎用名にすると、後でリネームせずに済むためおすすめ。ドキュメントでよく見る mysite でも構いません。
アプリ作成
Django ではプロジェクト = サイト全体、アプリ = 機能単位。例えば「ブログサイト」プロジェクト内に「記事アプリ」「コメントアプリ」「ユーザアプリ」がある形:
# 初期 DB 構築(標準アプリのテーブル作成)
python manage.py migrate
# アプリ作成
python manage.py startapp blog
# 結果
.
├── manage.py
├── config/
└── blog/
├── __init__.py
├── admin.py ← 管理画面登録
├── apps.py ← アプリ設定
├── models.py ← データモデル
├── tests.py ← テスト
├── views.py ← ビュー(リクエストハンドラ)
├── migrations/ ← マイグレーション
└── (urls.py) ← 自分で作成
settings.py の INSTALLED_APPS 追加
# config/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 自作アプリ
'blog.apps.BlogConfig', # または 'blog' でも可
]
# 言語・タイムゾーン(日本向け)
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
USE_I18N = True
USE_TZ = True
# DB(デフォルトは SQLite)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
# 静的ファイル
STATIC_URL = 'static/'
STATIC_ROOT = BASE_DIR / 'staticfiles'
urls.py のルーティング
# blog/urls.py(自分で作成)
from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [
path('', views.index, name='index'),
path('/', views.detail, name='detail'),
]
# blog/views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, Django!")
def detail(request, article_id):
return HttpResponse(f"Article {article_id}")
# config/urls.py(プロジェクト側)
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')),
]
初期化と管理ユーザ作成
# モデルからマイグレーションファイルを作成
python manage.py makemigrations
# DB に適用
python manage.py migrate
# 管理画面用スーパーユーザ作成
python manage.py createsuperuser
# Username: admin
# Email: admin@example.com
# Password: ****
# Password (again): ****
# 開発サーバ起動
python manage.py runserver
# Starting development server at http://127.0.0.1:8000/
# ポート変更
python manage.py runserver 0.0.0.0:8080
ブラウザで:
http://127.0.0.1:8000/→ Django Welcome ページhttp://127.0.0.1:8000/blog/→ "Hello, Django!"http://127.0.0.1:8000/admin/→ 管理画面(superuser でログイン)
モデルを作って管理画面に出す
# blog/models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
published_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
# blog/admin.py
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ('id', 'title', 'published_at')
search_fields = ('title', 'body')python manage.py makemigrations blog
python manage.py migrate
python manage.py runserver
# /admin/ から Article を CRUD 可能
推奨ディレクトリ構造
mysite/
├── .venv/ ← 仮想環境(git 除外)
├── .env ← 環境変数(git 除外)
├── .gitignore
├── manage.py
├── requirements.txt
├── README.md
├── config/ ← プロジェクト設定
│ ├── settings/
│ │ ├── base.py
│ │ ├── dev.py
│ │ └── prod.py
│ ├── urls.py
│ └── wsgi.py
├── apps/ ← アプリをまとめる
│ ├── blog/
│ ├── users/
│ └── api/
├── static/ ← 静的ファイル
├── templates/ ← 共通テンプレート
└── media/ ← アップロードファイル(git 除外)
.gitignore の例
# Python
__pycache__/
*.py[cod]
*.egg-info/
# Django
*.log
db.sqlite3
db.sqlite3-journal
media/
# 環境
.venv/
.env
# IDE
.vscode/
.idea/
# OS
.DS_Store
Thumbs.db
よくあるトラブル
| 症状 | 原因と対処 |
|---|---|
ModuleNotFoundError: No module named 'django' | 仮想環境が無効化されている → source .venv/bin/activate |
You have unapplied migrations | python manage.py migrate 実行 |
Port 8000 is already in use | 別ポート: runserver 8001、または lsof -i:8000 で停止 |
| 管理画面に自作モデルが出ない | admin.py に register 忘れ |
| マイグレーション衝突 | python manage.py makemigrations --merge、または migrations を整理 |
FAQ
Q: startproject mysite と startproject mysite . の違い
A: 末尾のドット有無でディレクトリ階層が変わる。ドット付きはカレントに展開、無しは mysite/mysite/ という二重構造。可読性のためドット推奨。
Q: SQLite から PostgreSQL へ切替
A: pip install psycopg[binary] → settings.py の DATABASES を変更 → migrate。データは dumpdata/loaddata で移行。
Q: Django REST Framework と素の Django、どちらから始める?
A: 学習なら素の Djangoでビュー/テンプレート/モデルを理解 → API 化のニーズが出たら DRF 追加。最初から API オンリーなら直接 DRF でも OK。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
- 環境構築とプロジェクト/アプリの作成
- MVC(MVT)のそれぞれの使い方と説明
- データベースへの接続と操作
- Django Administration
- git管理
- エラー一覧
- バージョンの確認方法
- ログ出力方法
- SQLのログ出力方法
- ログのローテート設定
- settings.pyの定数にアクセスする方法
- 本番環境へのインストールとアプリのデプロイ(apache編)
- 本番環境へのインストールとアプリのデプロイ(nginx編)
- djangoアプリの本番の開始URLを変更する
- 静的(static)ファイルの置き場所と読み込み(画像、css、js )
- CSRFトークンをAjaxで使用する方法
- ajaxの使用例(POST編)
- ファイルのアップロードとファイルの名前
- クイックスタート/チュートリアル
- ログイン機能
- テンプレート側のログイン判定
- ビュー側のログイン判定
- 管理者ユーザーの作成/判定と管理画面
- モデルのjson化とレスポンス
- runserverでポートを指定する方法
- cronによるバッチ実行
- テンプレートで利用する共通のcontextを定義する方法
- プログラムが本番サーバーで反映されない場合の対処法
- APIの作成
- cron用コマンド・ファイルの作成
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?