IT

Django初心者のためのwebアプリ作り方完全ガイド

ブログ管理人も利用しているおすすめのオンライン学習プラットフォーム「Udemy」。
PythonやDjangoの学習コースも多数あるのでPythonやDjango初学者にはおすすめです!

開発の人気オンラインコース

Djangoとは?Pythonベースのwebアプリフレームワークの概要

Djangoは、Pythonで書かれた高機能なwebフレームワークであり、効率的なwebアプリの作り方を可能にします。

多くの開発者がDjangoを選ぶのは、その「バッテリー同梱」という思想により、webアプリを作る際に必要なツールがすべて揃っているからです。

Djangoを使えば、データベース操作、ユーザー認証、管理画面など、webアプリの作り方において重要な機能を短時間で実装できます。

InstagramやPinterestなどの大規模サービスでもDjangoが採用されており、スケーラビリティの高さも証明されています。

今回は、Djangoを使ったwebアプリの作り方を初心者にもわかりやすく解説していきます。

Python初心者のためのDjango超入門ガイドブログ管理人も利用しているおすすめのオンライン学習プラットフォーム「Udemy」。 PythonやDjangoの学習コースも多数あるの...

Djangoでwebアプリを作るための環境構築

Djangoでwebアプリを作るには、まず開発環境の構築から始めましょう。

Pythonがインストールされていることを前提に、以下の手順で進めます。

Pythonのインストール確認

Djangoはpythonで動作するため、まずPythonがインストールされているか確認しましょう。

ターミナルやコマンドプロンプトで以下のコマンドを実行します。

python --version

バージョンが表示されればPythonはインストール済みです。

もしPythonがインストールされていなければ、公式サイト(https://www.python.org/)からダウンロードしてインストールしましょう。

Pythonのバージョン確認方法|初心者から上級者向けに徹底解説 管理人も現在使っている仮想プライベートサーバー「Conoha VPS」。 料金が他のVPSよりも安くそこが魅力的です。コスパ重視で...

仮想環境の作成

webアプリの作り方で大切なのは、プロジェクトごとに環境を分けることです。

Pythonでは仮想環境を使うことで、プロジェクト間の依存関係の競合を避けることができます。

以下のコマンドで仮想環境を作成します。

python -m venv myvenv

作成した仮想環境を有効化します。

Windows:

myvenv\Scripts\activate

macOS/Linux:

source myvenv/bin/activate

Djangoのインストール

仮想環境を有効化したら、pipを使ってDjangoをインストールします。

pip install django

インストールが完了したら、以下のコマンドでDjangoのバージョンを確認できます。

python -m django --version

これでDjangoを使ったwebアプリの作り方を学ぶ準備が整いました。



Djangoプロジェクトの作成と基本構造

Djangoでwebアプリを作る最初のステップは、プロジェクトの作成です。

ターミナルで以下のコマンドを実行して、新しいDjangoプロジェクトを作成しましょう。

django-admin startproject mywebapp

このコマンドを実行すると、`mywebapp`というディレクトリが作成され、その中に基本的なプロジェクトファイルが生成されます。

プロジェクト構造の理解

Djangoプロジェクトの基本構造を理解することは、webアプリの作り方をマスターする上で重要です。

生成されたプロジェクトディレクトリ構造は以下のようになっています。

mywebapp/
    manage.py
    mywebapp/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

各ファイルの役割は以下の通りです。

– `manage.py`: Djangoプロジェクトを管理するためのコマンドラインユーティリティ
– `settings.py`: プロジェクトの設定ファイル
– `urls.py`: URLとビューの対応付けを行うファイル
– `asgi.py`: ASGIサーバーとの接続用ファイル
– `wsgi.py`: WSGIサーバーとの接続用ファイル

Djangoアプリケーションの作成

Djangoでは、プロジェクトの中に複数のアプリケーションを作成できます。

アプリケーションとは、webアプリの特定の機能を担当するモジュールのことです。

以下のコマンドで新しいアプリケーションを作成します。

cd mywebapp
python manage.py startapp myapp

アプリケーションが作成されると、以下のようなディレクトリ構造になります。

myapp/
    __init__.py
    admin.py
    apps.py
    models.py
    tests.py
    views.py
    migrations/

作成したアプリケーションをプロジェクトに登録するために、`settings.py`の`INSTALLED_APPS`リストに追加します。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',  # 追加したアプリケーション
]

Djangoでwebアプリのモデルを設計する

webアプリの作り方でもっとも重要なのは、データモデルの設計です。

Djangoでは、データベースのテーブルをPythonクラスとして定義します。

モデルクラスの作成

`models.py`ファイルを編集して、データモデルを定義しましょう。

例えば、ブログアプリケーションの記事を管理するモデルは以下のように定義できます。

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

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    published_date = models.DateTimeField(default=timezone.now)
    
    def __str__(self):
        return self.title

モデルを定義したら、マイグレーションを作成して、データベースに反映させます。

python manage.py makemigrations
python manage.py migrate

マイグレーションとは、モデルの変更をデータベースのスキーマに反映させる機能です。

これにより、webアプリの作り方において、データベース構造の変更を追跡しやすくなります。

管理画面での操作

Djangoの強力な機能の一つは、自動生成される管理画面です。

管理画面を通じてデータの閲覧や編集ができるようにするため、`admin.py`ファイルを編集します。

from django.contrib import admin
from .models import Article

admin.site.register(Article)

管理画面にアクセスするには、管理者ユーザーを作成する必要があります。

python manage.py createsuperuser

画面の指示に従ってユーザー名、メールアドレス、パスワードを入力します。

開発サーバーを起動して、管理画面にアクセスしてみましょう。

python manage.py runserver

ブラウザで`http://127.0.0.1:8000/admin/`にアクセスし、先ほど作成した管理者アカウントでログインします。



DjangoでURLとビューを設定する

Djangoでwebアプリを作る次のステップは、URLとビューの設定です。

URLはユーザーがアクセスするパス、ビューはそのリクエストに対する処理を定義します。

URLの設定

まず、`myapp`アプリケーション内に`urls.py`ファイルを作成します。

from django.urls import path
from . import views

urlpatterns = [
    path('', views.article_list, name='article_list'),
    path('article//', views.article_detail, name='article_detail'),
]

次に、プロジェクトの`urls.py`ファイルを編集して、アプリケーションのURLconfを含めます。

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

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

ビューの作成

URLに対応するビュー関数を`views.py`ファイルに定義します。

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

def article_list(request):
    articles = Article.objects.all().order_by('-published_date')
    return render(request, 'myapp/article_list.html', {'articles': articles})

def article_detail(request, pk):
    article = get_object_or_404(Article, pk=pk)
    return render(request, 'myapp/article_detail.html', {'article': article})

ビュー関数では、モデルからデータを取得し、テンプレートにデータを渡します。

webアプリの作り方における、「MVT(Model-View-Template)」アーキテクチャの「V(View)」部分がこれにあたります。

Djangoのテンプレートを使ったフロントエンド開発

Djangoでwebアプリを作る過程で、ユーザーに表示するHTMLを作成するのがテンプレートです。

テンプレートを使うことで、動的なwebページを簡単に作成できます。

テンプレートディレクトリの作成

まず、テンプレートファイルを格納するディレクトリを作成します。

mkdir -p myapp/templates/myapp

テンプレートファイルの作成

記事一覧を表示するテンプレート(`article_list.html`)を作成します。

{% extends 'myapp/base.html' %}

{% block content %}
    <h1>記事一覧</h1>
    {% for article in articles %}
        <div class="article">
            <h2><a href="{% url 'article_detail' pk=article.pk %}">{{ article.title }}</a></h2>
            <p>公開日: {{ article.published_date }}</p>
        </div>
    {% empty %}
        <p>記事がありません。</p>
    {% endfor %}
{% endblock %}

記事詳細を表示するテンプレート(`article_detail.html`)も作成します。

{% extends 'myapp/base.html' %}

{% block content %}
    &lt;div class="article-detail"&gt;
        &lt;h1&gt;{{ article.title }}&lt;/h1&gt;
        &lt;p&gt;公開日: {{ article.published_date }}&lt;/p&gt;
        &lt;div class="article-content"&gt;
            {{ article.content|linebreaks }}
        &lt;/div&gt;
        &lt;a href="{% url 'article_list' %}"&gt;記事一覧に戻る&lt;/a&gt;
    &lt;/div&gt;
{% endblock %}</code></pre>

両方のテンプレートで継承している基本テンプレート(`base.html`)も作成します。

<pre class="language-python"><code><!DOCTYPE html>
<html>
<head>
    <title>My Django Blog</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        body {
            font-family: Arial, sans-serif;
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
        }
        .article {
            margin-bottom: 20px;
            padding-bottom: 10px;
            border-bottom: 1px solid #eee;
        }
        .article-detail {
            margin-top: 20px;
        }
    </style>
</head>
<body>
    <header>
        <h1><a href="{% url 'article_list' %}">My Django Blog</a></h1>
    </header>
    <main>
        {% block content %}
        {% endblock %}
    </main>
    <footer>
        <p>&copy; 2025 My Django Blog</p>
    </footer>
</body>
</html>

テンプレートでは、`{{ 変数 }}`の形式で変数を表示したり、`{% タグ %}`の形式で制御構造を記述したりできます。

これにより、webアプリの作り方において、動的なコンテンツを簡単に生成できます。



Djangoでフォームを使ったデータ入力の実装

webアプリの作り方でよく必要になるのが、ユーザーからのデータ入力を受け付けるフォームです。

Djangoでは、フォームを簡単に作成・処理できる機能が提供されています。

フォームクラスの定義

`forms.py`ファイルを作成し、フォームクラスを定義します。

touch myapp/forms.py
from django import forms
from .models import Article

class ArticleForm(forms.ModelForm):
    class Meta:
        model = Article
        fields = ('title', 'content',)
        
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['title'].widget.attrs.update({'class': 'form-control'})
        self.fields['content'].widget.attrs.update({'class': 'form-control'})

新規記事作成ビューの追加

`views.py`に新規記事作成用のビューを追加します。

from django.shortcuts import render, get_object_or_404, redirect
from .models import Article
from .forms import ArticleForm

# 既存のビュー関数...

def article_new(request):
    if request.method == "POST":
        form = ArticleForm(request.POST)
        if form.is_valid():
            article = form.save(commit=False)
            article.save()
            return redirect('article_detail', pk=article.pk)
    else:
        form = ArticleForm()
    return render(request, 'myapp/article_edit.html', {'form': form})

def article_edit(request, pk):
    article = get_object_or_404(Article, pk=pk)
    if request.method == "POST":
        form = ArticleForm(request.POST, instance=article)
        if form.is_valid():
            article = form.save(commit=False)
            article.save()
            return redirect('article_detail', pk=article.pk)
    else:
        form = ArticleForm(instance=article)
    return render(request, 'myapp/article_edit.html', {'form': form})

URLパターンの追加

`urls.py`に新しいURLパターンを追加します。

from django.urls import path
from . import views

urlpatterns = [
    path('', views.article_list, name='article_list'),
    path('article//', views.article_detail, name='article_detail'),
    path('article/new/', views.article_new, name='article_new'),
    path('article//edit/', views.article_edit, name='article_edit'),
]

フォームテンプレートの作成

フォーム表示用のテンプレート(`article_edit.html`)を作成します。

{% extends 'myapp/base.html' %}

{% block content %}
    

{% if form.instance.pk %}記事の編集{% else %}新規記事{% endif %}

{% csrf_token %} {{ form.as_p }}
キャンセル {% endblock %}

また、記事一覧テンプレートに新規記事作成へのリンクを追加します。

{% extends 'myapp/base.html' %}

{% block content %}
    
新規記事作成

記事一覧

{% endblock %}

こうして、webアプリの作り方において重要な、データの作成・編集機能を実装することができました。

Djangoアプリにユーザー認証を追加する

webアプリの作り方で重要なのが、ユーザー認証機能です。

Djangoには、ユーザー認証のための機能が標準で備わっています。

認証機能の有効化

`settings.py`の`INSTALLED_APPS`に認証関連のアプリが含まれていることを確認します。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',  # 認証システム
    'django.contrib.contenttypes',
    'django.contrib.sessions',  # セッション管理
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
]

ログイン・ログアウト機能の追加

`urls.py`にログイン・ログアウト用のURLを追加します。

from django.urls import path, include
from django.contrib import admin
from django.contrib.auth import views as auth_views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/login/', auth_views.LoginView.as_view(template_name='registration/login.html'), name='login'),
    path('accounts/logout/', auth_views.LogoutView.as_view(next_page='/'), name='logout'),
    path('', include('myapp.urls')),
]

ログインテンプレートを作成します。

mkdir -p myapp/templates/registration
{% extends 'myapp/base.html' %}

{% block content %}
    <h2>ログイン</h2>
    {% if form.errors %}
        <p class="error">ユーザー名とパスワードが一致しません。もう一度お試しください。</p>
    {% endif %}
    <form method="post" action="{% url 'login' %}">
        {% csrf_token %}
        <table>
            <tr>
                <td>{{ form.username.label_tag }}</td>
                <td>{{ form.username }}</td>
            </tr>
            <tr>
                <td>{{ form.password.label_tag }}</td>
                <td>{{ form.password }}</td>
            </tr>
        </table>
        <input type="submit" value="ログイン" />
        <input type="hidden" name="next" value="{{ next }}" />
    </form>
{% endblock %}

アクセス制限の設定

認証が必要なビューを保護するために、デコレーターを使用します。

from django.contrib.auth.decorators import login_required

@login_required
def article_new(request):
    # 既存のコード...

@login_required
def article_edit(request, pk):
    # 既存のコード...

また、未ログイン時のリダイレクト先を`settings.py`に設定します。

LOGIN_REDIRECT_URL = '/'
LOGIN_URL = '/accounts/login/'

ベーステンプレートにログイン状態を表示する部分を追加します。

<!DOCTYPE html>
<html>
<head>
    <!-- 既存のコード -->
</head>
<body>
    <header>
        <h1><a href="{% url 'article_list' %}">My Django Blog</a></h1>
        <div class="user-info">
            {% if user.is_authenticated %}
                <p>こんにちは、{{ user.username }}さん <a href="{% url 'logout' %}">ログアウト</a></p>
            {% else %}
                <p><a href="{% url 'login' %}">ログイン</a></p>
            {% endif %}
        </div>
    </header>
    <!-- 以下は既存のコード -->
</body>
</html>

これで、webアプリの作り方において重要な、ユーザー認証機能が実装できました。



Djangoアプリをデプロイする方法

ローカルで開発したwebアプリを実際にインターネット上で公開するためのデプロイ方法を説明します。

本番環境向けの設定

本番環境では、セキュリティや性能のために特別な設定が必要です。

`settings.py`ファイルを編集します。

import os
from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', 'your-default-secret-key')

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = os.environ.get('DJANGO_DEBUG', '') != 'False'

ALLOWED_HOSTS = ['your-domain.com', 'www.your-domain.com', 'localhost', '127.0.0.1']

# Application definition
# 既存のコード...

# Static files (CSS, JavaScript, Images)
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

# Security settings
if not DEBUG:
    SECURE_SSL_REDIRECT = True
    SESSION_COOKIE_SECURE = True
    CSRF_COOKIE_SECURE = True
    SECURE_BROWSER_XSS_FILTER = True
    SECURE_CONTENT_TYPE_NOSNIFF = True

デプロイ用のパッケージ

本番環境で必要なパッケージをインストールします。

pip install gunicorn psycopg2-binary dj-database-url whitenoise

`requirements.txt`ファイルを作成して、必要なパッケージをリストアップします。

pip freeze > requirements.txt

Herokuへのデプロイ

Herokuは、Djangoアプリケーションのデプロイが簡単なPaaSプラットフォームです。

まず、`Procfile`というファイルをプロジェクトのルートディレクトリに作成します。

echo "web: gunicorn mywebapp.wsgi --log-file -" > Procfile

静的ファイル処理のために、`settings.py`に以下を追加します。

MIDDLEWARE = [
    # 他のミドルウェア...
    'whitenoise.middleware.WhiteNoiseMiddleware',
]

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

Heroku CLIをインストールし、アプリケーションをデプロイします。

heroku login
heroku create my-django-app
git add .
git commit -m "Ready for Heroku deployment"
git push heroku main
heroku run python manage.py migrate
heroku run python manage.py createsuperuser

これで、Djangoを使ったwebアプリの作り方から、デプロイまでの一連の流れが完了しました。

まとめ:Djangoでwebアプリを作るメリットと次のステップ

この記事では、Djangoを使ったwebアプリの作り方を詳しく解説しました。

Djangoは、強力な機能と明確な構造を持ち、初心者にも扱いやすいwebフレームワークです。

モデル、ビュー、テンプレートという明確な分離により、コードの保守性が高く、拡張性にも優れています。

webアプリの作り方を学ぶ上で、Djangoは素晴らしい選択肢といえるでしょう。

以下に、Djangoでwebアプリを作る際のメリットをまとめます。

1. 豊富な機能を持つフレームワークで、開発速度が向上します
2. セキュリティ対策が標準で備わっており、安全なwebアプリを作りやすいです
3. 管理画面が自動生成され、コンテンツ管理が簡単です
4. スケーラビリティが高く、小規模から大規模なwebアプリまで対応できます
5. 活発なコミュニティと豊富なドキュメントにより、問題解決が容易です

これからさらにDjangoでのwebアプリの作り方を極めるために、以下のステップに進むことをお勧めします。

– Django REST Frameworkを学んでAPIを構築する
– フロントエンドフレームワーク(React, Vue.jsなど)との連携
– テストの書き方を学ぶ
– デプロイの自動化を実装する

Djangoでのwebアプリの作り方を理解し、実践することで、あなたのPython開発スキルは大きく向上するでしょう。

Djangoで作られたサイト・サービスを紹介!PythonのWebフレームワークを徹底解説ブログ管理人も利用しているおすすめのオンライン学習プラットフォーム「Udemy」。 Pythonの学習コースも多数あるのでPython...
現場で使える Django の教科書《基礎編》[3.2 LTS 対応版]

現役エンジニアから学べるプログラミングスクール「TechAcademy」。
コースにもよりますが、現役エンジニアに質問・相談できる環境が整っており、サポート体制が充実しているのが魅力的なポイントです。
また、Pythonのコースも充実しており、今回紹介した内容をより深く学ぶことができます。
お金は結構かかりますが、サポートが手厚いので特にプログラミング初心者の方は受講する価値があります。

手出しゼロで利用できる♪話題のポイ活始めるならモッピー!