これからPythonフレームワークであるDjangoを始めたい初心者・入門者は、Djangoの実行環境を準備する必要があります。
そのために、Djangoのインストールのほかに実行環境構築も実施しなければ使えません。
ここでは、以下の悩みをお持ちの方に読み進めていただきたいです。
- そもそもDjangoとは?
- Djangoの公式ドキュメント/チュートリアルが分かりづらい
- Djangoプロジェクトの全体構造やディレクトリ/ファイル構成を学びたい
これらの悩みを解決しながら、Djangoのインストールと設定・環境構築を解説します。
記事を読み終えると、Djangoアプリケーション実行環境と初期Djangoプロジェクトの構造が理解できます。
Django(ジャンゴ)とは?

Django(ジャンゴ)は、Python製のWebフレームワークです。
PythonのWebフレームワークの中で最も利用者数が多いフレームワークになります。
また、Python製のフルスタックWebフレームワークを利用するなら現状でDjango一択です。
ライブラリとフレームワークの違い
アプリ開発を始めると、ライブラリやフレームワークなどを多用することになります。
また、図解がないと立ち位置が分からず理解しづらいです。

ライブラリとは
ライブラリは、複数のパッケージから成り立っています。
注意点として、標準ライブラリとがぶライブラリがあります。
例えば、Pythonインストール時点で同梱されるライブラリは標準ライブラリになります。
また、Numpyやpandas/seleniumなど別個インストールするものは外部ライブラリにあたります。
フレームワークとは
フレームワークは、アプリケーション開発において全体の枠組みを決める機能を持ちます。
そのため、フレームワークは「枠組みを決める」、ライブラリは「機能を実現させる」ものとして目的から役割を分かちます。
ここでは、例としてPythonの代表的なフレームワークを記載します。
フレームワーク | 公式サイト | 初回リリース時期 |
---|---|---|
Flask(フラスク/フラスコ) | https://palletsprojects.com/p/flask/ | 2010年 |
Django(ジャンゴ) | https://www.djangoproject.com/ | 2005年 |
Bottle(ボトル) | https://bottlepy.org/docs/dev/ | 2009年 |
FastAPI(ファストエーピーアイ) | https://fastapi.tiangolo.com/ | 2018年 |
ライブラリとフレームワークの役割と概念理解に注意しましょう。
PythonとDjangoのバージョンと注意点
Djangoのバージョンは、Pythonのバージョンと密接に関連しています。
Djangoバージョン | Pythonバージョン |
---|---|
4.2 | 3.8, 3.9, 3.10, 3.11, 3.12(4.2.8で追加) |
5.0 | 3.10, 3.11, 3.12 |
5.1 | 3.10, 3.11, 3.12, 3.13(5.1.3で追加) |
5.2 | 3.10, 3.11, 3.12, 3.13 |
サポートが終了したPythonバージョンは、Pythonプロジェクトによって保守されなくなるためDjangoで使用すべきではありません。
Djangoの特徴
DjangoにはWebフレームワークとして以下の特徴があります。
- フルスタックWebフレームワーク
- MVTモデルの採用
- セキュリティ機能の装備
Djangoは、別のPython製フレームワークと比べて開発規模が大きい場合に利用されます。
【Djangoの特徴】フルスタックWebフレームワーク
改めて、DjangoはフルスタックWebフレームワークです。
そのため、中規模以上のWebアプリケーション開発に用いられます。
また、Djangoをインストールすると次のような機能が利用できます。
- ユーザー認証
- ORM(O/Rマッパー)
- URLディスパッチャ
- Djangoモデルインスタンスのシリアル化機構
- 組み込みサーバー
- HTMLフォーム検証システム
- キャッシュフレームワーク
- 管理画面
- 多言語化機構
- テンプレートエンジン機能拡張機構
また、Django REST framework(DRF)を追加インストールすると、WebアプリだけでなくREST API(RESTful API)が作れます。
【Djangoの特徴】MVTモデルの採用

Djangoでは、UIを持つアプリを実装するデザインパターンとしてMTV(Model/View/Template)モデルを採用しています。
Model/View/Templateは以下の役割を持ちます。
- Model:ロジックを担当
- View:入力を受け取りModelとTemplateを制御
- Template:入出力を担当
一般的に、MVCモデル(Model/View/Controller)が有名ですが、MTVのViewはMVCのControllerに相当し、MTVのTemplateはMVCのViewに相当します。
【Djangoの特徴】セキュリティ機能の装備
Djangoはいくつかセキュリティ機能が標準装備されており、他のPython製フレームワークよりもセキュリティ対策が充実しています。
以下は、Django標準のセキュリティ機能一覧になります。
機能名 | 対応する脅威 |
---|---|
XSS対策(クロスサイトスクリプティング) | ユーザー入力によるHTML/JS注入 |
CSRF対策(クロスサイトリクエストフォージェリ) | 不正リクエスト送信 |
SQLインジェクション防止 | DBクエリ改ざん |
クリックジャッキング防止 | iframeによるUIハイジャック |
セッション保護機構 | セッション固定攻撃/ハイジャック |
パスワードハッシュ化(PBKDF2, bcrypt等) | パスワード漏洩・盗聴 |
HTTPS強制・セキュリティヘッダ設定 | 通信盗聴・改ざん |
ホストヘッダ検証 | HTTP Hostヘッダ攻撃 |
ファイルアップロード安全化 | 任意ファイル実行 |
管理サイト(admin)保護機構 | 管理画面不正アクセス |
クリックジャッキング対策(X-Frame-Options) | UI偽装攻撃 |
Content Security Policy対応(CSP) | スクリプトインジェクション抑止 |
SSL Cookie設定 | Cookie盗難防止 |
セキュリティミドルウェア | 各種ヘッダ付与・検証 |
XSS対策(クロスサイトスクリプティング)
XSS(クロスサイトスクリプティング)は、ユーザーが入力したデータをHTML内にそのまま出力すると悪意あるスクリプトが実行される脆弱性を突いた手法です。
Djangoテンプレートエンジンは自動エスケープ機構を持ち、デフォルトでHTMLタグやJSを無効化します。
# views.py
from django.shortcuts import render
def hello(request):
name = request.GET.get("name", "")
return render(request, "hello.html", {"name": name})
<p>こんにちは、{{ name }} さん!</p>
<script>alert(1)</script>と入力しても、HTML上では次のようにエスケープされます。
<p>こんにちは、<script>alert(1)</script> さん!</p>
危険なケースとして、{{ name|safe }} とするとエスケープが無効化されて危険です。
- Djangoのテンプレートは自動エスケープONがデフォルト。
- フィルタ|safeの使用は厳重注意。
- 必要ならばbleachなどのホワイトリストHTMLサニタイザで制御。
CSRF対策(クロスサイトリクエストフォージェリ)
CSRF(クロスサイトリクエストフォージェリ)は、ログイン中のユーザーが外部サイトから不正なPOSTリクエストを送信される攻撃です。
DjangoはデフォルトでCSRFトークン認証を行います。
<!-- template.html -->
<form method="POST" action="/comment/">
{% csrf_token %}
<input type="text" name="comment">
<button type="submit">送信</button>
</form>
# views.py
from django.views.decorators.csrf import csrf_exempt
from django.shortcuts import render
def post_comment(request):
if request.method == "POST":
...
return render(request, "template.html")
- {% csrf_token %}をフォーム内に入れるとDjangoが自動でトークンを検証。
- ミドルウェアCsrfViewMiddlewareが有効ならトークンがないリクエストは拒否。
- APIで使う場合は@csrf_exempt or CSRF_TRUSTED_ORIGINSの設定可能。
SQLインジェクション防止
SQLインジェクションは、SQL文にユーザー入力が直接入るとクエリが改ざんされる脆弱性を突いた攻撃です。
DjangoのORMはプレースホルダー構文を自動で使用し、SQL文を安全に生成します。
# 安全:Django ORM
from myapp.models import User
user = User.objects.filter(username=request.GET.get('username')).first()
内部的にSELECT * FROM user WHERE username = %s
のようにプレースホルダー化されます。
その他、Djangoのセキュリティ対策一覧の詳細情報を知りたい人は公式ドキュメントから確認できます。

Djangoでできること
Djangoが活用されるケースは、主に以下の2つで活用されます。
- Webアプリケーション開発
- WebAPI開発
ここでは、簡単にDjangoがWebアプリ&API開発に強い理由をまとめています。
Djangoの特性 | Webアプリ開発での利点 | API開発での利点 |
---|---|---|
ORM(データベース抽象化) | データベース構築が容易 | シリアライザと連携してデータ出力 |
MVTアーキテクチャ | ロジック分離で保守性高 | REST構造に転用しやすい |
認証・権限管理 | ログイン制御を即導入 | Token・JWT対応が容易 |
管理画面自動生成 | データ運用・確認が即可能 | デバッグ・管理用途にも活用可 |
強固なセキュリティ | CSRF, XSS, SQL対策が自動 | 認証付きAPIでも高セキュリティ |
拡張性 | アプリ分割構成に強い | DRF, GraphQLなど拡張容易 |
Webアプリケーション開発
再三記載していますが、DjangoはフルスタックWebフレームワークです。
そのため、Webアプリに必要な機能がはじめから揃っています。
標準装備されている機能 | 用途 |
---|---|
ORM(Object Relational Mapper) | DB操作をPythonコードで簡単に行える |
認証機能(ログイン/ログアウト/権限管理) | ユーザー管理を自動化 |
管理サイト(Django Admin) | データの登録・編集・削除をGUIで可能 |
テンプレートエンジン | 動的HTML生成 |
URLルーティング | URLごとに処理を分岐 |
フォームバリデーション | ユーザー入力の検証 |
セキュリティ機能 | CSRF/XSS/SQL Injection対策が標準装備 |
上記の機能が最初から揃っているため、開発者はビジネスロジックに集中できます。
「小規模な個人アプリ」から「大規模な商用サービス」まで幅広く対応できます。
また、Djangoを使ったWebアプリのサービス例が以下になります。
サービス種別 | Djangoでの強み |
---|---|
SNS(コミュニティサイト) | 認証機能・ORM・管理画面で効率的に構築 |
ECサイト | 商品DBやユーザー管理を容易に構築 |
ブログ・ニュースサイト | 管理画面+テンプレートで即構築 |
学習管理システム(LMS) | ユーザー権限とフォームバリデーションを活用 |
特にデータ中心のWebサービス(SNS・CMS・ECサイト)に最適です。
WebAPI開発
DjangoはHTML生成だけでなく、「データをAPIとして外部に提供する」ことも得意です。
特に拡張ライブラリDjango REST Framework(DRF)を使うことで、JSONレスポンスを返すRESTful APIを高速に構築できます。
機能 | 説明 |
---|---|
シリアライザ(Serializer) | ModelのデータをJSON形式に変換 |
認証・認可 | Token認証/JWT/OAuth2などが簡単に実装可能 |
ページネーション | データを分割して返す仕組み |
フィルタ・検索 | QuerySetを自動でフィルタリング |
ブラウザ対応API | APIをブラウザ上で直接確認できる |
また、Djangoを使ったAPI開発のサービス例が以下になります。
サービス種別 | Djangoの活かし方 | 実例 |
---|---|---|
モバイルアプリのバックエンド | APIサーバーとして機能(iOS/Android連携) | Instagram API, Pinterest |
フロント分離型Web(SPA) | React/Vueと連携するバックエンドAPI | React + DRF構成など |
IoTデータ連携API | センサーや外部機器との通信処理 | 工場・医療用IoT基盤 |
機械学習モデル提供API | モデル推論をWeb経由で提供 | AI APIサーバー |
Djangoは「データベースと外部クライアント(フロント・モバイル)をつなぐシステム」として活用されます。
強力なORMと認証機構を活かして、APIサーバーを短時間で構築できます。
Djangoを利用するためのPython開発環境構築
PythonのWebフレームワークであるDjangoを利用するには、Pythonの開発環境構築が必要です。
Pythonの開発環境を構築するために、以下の手順を示します。
- Pythonのダウンロードとインストール
- Visual Studio Code(VSCode)のインストール
- Djangoのインストール
本記事では、Djangoのインストールからメインに記載しておりますが、PythonとVSCodeインストールがまだできていない人は「【Python】ダウンロードとインストール方法から実行環境構築まで」を一読ください。

Pythonにてローカル環境に仮想環境を作成する
Pythonで開発を実施する際、開発プロジェクトごとに専用の実行環境を作成し切り替えることができます。
また、開発用として一時的に作成する実行環境を「仮想環境」と呼びます。
ローカル環境で開発を進めるにあたり、venvモジュールを利用し仮想環境を構築します。
venvは、Pythonに標準搭載された仮想環境用モジュールです。
venvを利用することで、プロジェクトごとに分離したPython実行環境を構築できるため、各実行環境でそれぞれのパッケージを管理できます。
Pythonによる仮想環境の構築方法が知りたい人は、「【Python】ダウンロードとインストール方法から環境構築まで」を一読ください。

Djangoのインストール
本記事では、WindowsPCによる任意のディレクトリにて「django-project」を作成しています。
インストール自体は簡単で、以下のコマンドを実行しましょう。
pip install django
上記のコマンドを実行すると、最新バージョンであるDjangoのインストールが完了します。
また、バージョン指定によるDjangoのインストールを実施したい場合は、以下のコマンドで実行します。
pip install django==4.2.10
Djangoが依存するパッケージ
Djangoをインストールすると、Djangoが依存しているパッケージも同時にインストールされます。
また、インストールされたパッケージを確認するには、以下のコマンドで確認できます。
pip list
Djangoをインストールすることで同時にインストールされるパッケージは以下です。
パッケージ | 説明 |
---|---|
asgiref | ASGIユーティリティ群(sync/asyncブリッジやライフサイクル補助)を提供。 Djangoの非同期処理サポートに使われる。 |
sqlparse | SQLのパース/フォーマット/分割を行うライブラリ。 Djangoの開発/デバッグ用にSQLの整形や分割で利用される。 |
tzdata | IANAタイムゾーンデータをPython環境に提供するパッケージ。 zoneinfo経由で正確なタイムゾーン変換を可能にする。 |
Djangoで利用する代表的なモジュール
ここでは、Django本体に含まれる主要モジュールをカテゴリに分けてまとめています。
一つ一つのモジュールに関する詳細情報は別途調べましょう。(膨大にあるため)
カテゴリ名 | 説明 |
---|---|
コア機能モジュール群 | Djangoの基盤となる中核部分。 アプリ設定/例外/コマンド実行/共通ユーティリティなど全機能の土台を形成。 |
URL/ルーティング | URLとビューの対応付けを管理。 path()やre_path()により柔軟なルーティングを実現し、URL逆引きにも対応。 |
テンプレート/テンプレートタグ | HTMLやメール本文などの動的生成を担うテンプレートエンジン。 タグ・フィルタでロジックを簡潔に記述可能。 |
ミドルウェア群 | リクエストとレスポンスの間に処理を挟み込む仕組み。 セキュリティ/CSRF/セッション/認証などを自動適用。 |
データベース/ORM | モデルを通じてDB操作を抽象化するORM機構。 SQLを直接書かずデータ操作/マイグレーション可能。 |
フォーム/バリデーション | 入力フォームの生成/検証を担当。 フォーム定義とモデルを連携し、入力値を安全に処理/保存できる。 |
認証/権限/セッション | ログイン/ログアウト/ユーザー権限管理/セッション保持などWeb アプリに不可欠な認証機能群。 |
国際化/翻訳 | 多言語対応を支援。 gettextベースでテキスト翻訳やタイムゾーン変換、ロケール管理を提供。 |
管理サイト/contribアプリ | 管理画面(Admin)をはじめとするDjango標準アプリ群。 認証/静的ファイル/地理情報など多機能を提供。 |
キャッシュ/メール/ファイル処理/ユーティリティ | キャッシュバックエンド/メール送信/ファイル入出力/各種補助関数群を含むアプリ共通の支援モジュール。 |
Djangoのユーティリティコマンド
Djangoには、2種類のユーティリティコマンドがあります。
- django-admin
- manage.py
django-adminコマンドは、Djangoプロジェクト作成時にしか使いません。
manage.pyコマンドは、Djangoアプリケーション作成だけでなく様々な場面で使います。
django-adminコマンド
Djangoプロジェクトを作成する場合は、django-adminコマンドで自動作成できます。
django-admin startproject <プロジェクト名>
任意のディレクトリにてコマンドを実行すると、以下のディレクトリを自動作成します。
django_project
├── django_project
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
また、ハイフンを含んだプロジェクト名などはDjangoにおいて命名規則に反することがあります。
上記のエラーが発生した場合は、別のプロジェクト名に変更しましょう。
manage.pyコマンド
manage.pyコマンドは、主にDjangoアプリケーションに対して操作を実行します。
- Djangoアプリケーションの自動作成
- 開発サーバー(runserver)の起動
- マイグレーションの作成/実行/状況確認/ロールバック
- スーパーユーザーの作成
- テストの実行
- インタープリターの実行
Djangoアプリケーションの自動作成
Djangoアプリケーションを自動生成する場合は以下のコマンドを実行します。
python manage.py startapp <アプリケーション名>
ここでは、アプリケーション名をdjango_appと命名しています。
自動生成した場合、以下のディレクトリ構成が作成されます。
django_project
├── django_app
│ ├── migrations
│ │ └── __init__.py
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── django_project
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
開発サーバー(runserver)の起動
Djangoプロジェクトをローカルマシンの環境で動作させるため、開発用サーバーを起動するコマンドは以下になります。
python manage.py runserver
上記のコマンドを実行し、http://127.0.0.1:8000/にアクセスしてみましょう。

初期状態のプロジェクトであれば、上記のような画像が表示されます。
マイグレーションの作成/実行/状況確認/ロールバック
モデルに記述したデータベーステーブル定義に基づき、マイグレーションファイルの自動生成/実行は以下になります。
python manage.py makemigrations
No installed app with labelエラーが出る場合は、解決方法としてsettings.pyのINSTALLED_APPSに<アプリケーション名>を追加します。
INSTALLED_APPS = [
'<アプリケーション名>',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
python manage.py migrate
また、マイグレーションの履歴はDjangoが管理するテーブル(django_migrations)に保存されます。
履歴データを使い、マイグレーションの適用状況を確認あるいは以前の状態に戻すことができます。
以下のコマンドにて、マイグレーションの適用状況を確認できます。
python manage.py showmigrations <アプリケーション名>
showmigrationsコマンドもsettings.pyに追加しないとNo installed app with labelエラーが出るため注意しましょう。
例えば、以下のマイグレーション適用状況があるとします。
[X]0001
[X]0002
[ ]0003
[ ]0004
マイグレーションファイルの一覧と適用状況が[X]で表示されます。
[X]になっている舞う偽レーションファイルは適用済みを意味しています。
以下のコマンドにて、マイグレーションのロールバックを実行できます。
python manage.py migrate <アプリケーション名> 0001
[X]0001
[ ]0002
[ ]0003
[ ]0004
スーパーユーザーの作成
スーパーユーザー(サイト管理者)を作成するには、「createsuperuser」を指定します。
以下のコマンドを実行すると、ユーザー名とメールアドレスとパスワード入力が求められます。
入力を終えると、スーパーユーザーが作成された旨が表示されます。
python manage.py createsuperuser
Username: <任意のユーザー名>
Email address: <任意のメールアドレス>
Password: <任意のパスワード>
Password (again): <任意のパスワード>
Superuser created successfully.
http://127.0.0.1:8000/admin/login/?next=/admin/にアクセスしてみましょう。

作成したスーパーユーザーでログインすると、サイト管理画面にログインできます。

テストの実行
テストコードを実行するには、「test」を指定します。
テスト範囲を指定し実行することも可能です。
以下は、ケース例によるテストになります。
# プロジェクト内の全テスト実行
python manage.py test
# アプリケーション単位の実行
python manage.py test django_app
# テストモジュール単位の実行
python manage.py test django_app.tests.test_views
# テストクラス単位の実行
python manage.py test django_app.tests.test_views.TestTaskCreateView
インタープリターの実行
「shell」を指定しコマンド実行すると、Djangoプロジェクトの設定を読み込みインタープリターを起動します。
Djangoのライブラリが使えるため、主にモデルを呼び出しデータベース操作をテストする用途などで使えます。
python manage.py shell
Djangoプロジェクトの全体構造
Djangoは、1つのWebアプリを1プロジェクト(1ディレクトリ)で管理します。
また、プロジェクトはプロジェクト全体に関わる設定を記述したファイル群(1ディレクトリ)と機能単位にまとめたアプリケーション(これも1ディレクトリ)で構成されます。

プロジェクトは1つ以上のアプリケーションが必要になり、全ての機能を1アプリケーションで構成することも可能です。
しかし、多機能なWebアプリケーション開発の場合、1ファイルのコード量が増加し複雑になるため、あまりおすすめできません。
さらに、各アプリケーションが互いに依存しないよう独立性を保つことで、アプリケーションを削除や使い回しなど再利用性と拡張性につながります。
Djangoプロジェクトのディレクトリ/ファイル構成
ここでは、django-adminコマンドによるプロジェクト自動生成とmanage.pyコマンドによるアプリケーション作成を実行します。
また、初期状態のDjangoプロジェクトのディレクトリ/ファイル構成を考えます。
ただし、templatesディレクトリやindex.htmlが自動生成されないため、テンプレートは追加しています。
django_project
├── django_app
│ ├── migrations
│ │ └── __init__.py
│ ├── templates
│ │ └── index.html
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── django_project
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
以下は、プロジェクト用ディレクトリ/ファイル構成とアプリケーション用ディレクトリ/ファイル構成に分けて端的な説明を記載しています。
ディレクトリ名 | ファイル名 | 説明 |
---|---|---|
django_project | – | プロジェクト全体に関わるファイルをまとめるディレクトリ |
django_project | __init__.py | Pythonパッケージだと示すファイル |
django_project | asgi.py | デプロイ用ファイル |
django_project | settings.py | プロジェクト設定ファイル |
django_project | urls.py | プロジェクト用ルーティング定義ファイル |
django_project | wsgi.py | デプロイ用ファイル |
ディレクトリ名 | ファイル名 | 説明 |
---|---|---|
django_app | – | アプリケーション関連ファイルをまとめるディレクトリ |
migrations | – | マイグレーションファイルを格納するディレクトリ |
migrations | __init__.py | Pythonパッケージだと示すファイル |
templates | – | テンプレートファイルを格納するディレクトリ |
templates | index.html | テンプレートファイル |
django_app | __init__.py | Pythonパッケージだと示すファイル |
django_app | admin.py | 管理サイト設定ファイル |
django_app | apps.py | アプリケーション構成設定ファイル |
django_app | models.py | モデル定義ファイル |
django_app | tests.py | テストコード記述ファイル |
django_app | views.py | ビュー定義ファイル |
最上位ディレクトリに配置されているmanage.pyは、コマンド実行用ファイルになります。