NEW! EPYC + NVMeベースのVPS

ログイン
+1 (855) 311-1555

DjangoとReactでシンプルなアプリを作る方法

15分で読めます - 2025年11月28日

hero section cover

Table of contents

  • DjangoとReactでシンプルなアプリを作る方法
  • 初心者のためのDjangoと Reactプロジェクト - FullStack Notesアプリを作ろう
  • セットアップ要件とインストール
  • Django でバックエンドを構築する
  • Reactでフロントエンドを構築する
  • Django と React を接続する
  • アプリの実行とテスト
  • まとめと次のステップ
  • よくある質問

Share

バックエンドにDjango、フロントエンドにReactを使用したフルスタックWebアプリケーションの構築方法をステップバイステップで解説します。

DjangoとReactでシンプルなアプリを作る方法

強力なバックエンドと動的なフロントエンドを持つWebアプリを作りたいですか?PythonフレームワークのDjangoとJavaScriptライブラリのReactの組み合わせは、これを実現する素晴らしい方法です。Djangoはデータベース管理やAPI作成といったバックエンドのタスクを処理し、Reactはレスポンシブでインタラクティブなユーザーインターフェースを作成します。

主なステップ

  1. 環境をセットアップする:- DjangoにはPython 3.xを、ReactにはNode.jsをインストールします。

    • 仮想環境を使用してPythonの依存関係を管理する。
    • python --versionnode --versionnpm --versionでインストールを確認します。
  2. プロジェクトを整理する:- Django バックエンドと React フロントエンド用に別々のフォルダを作りましょう。

    • バックエンドのセットアップにはdjango-admin startproject を使い、フロントエンドの初期化にはnpx create-react-app を使います。
  3. バックエンドをビルドします:- Django アプリを作成し、モデルを定義し、マイグレーションを生成します。

    • Django REST Framework を使ってAPI エンドポイントを構築します。
    • django-cors-headers を設定して、フロントエンドとバックエンド間の通信を可能にします。
  4. フロントエンドを開発する:- React コンポーネントを使用して、タスクとユーザーインタラクションを管理します。

    • API リクエスト用にAxios をインストールし、Django エンドポイントと統合します。
    • CSS を使ってアプリのスタイルを整え、きれいなユーザーインターフェイスを作ります。
  5. 接続とテスト:- Django をlocalhost:8000で、React をlocalhost:3000 で起動します。

    • Postman のようなツールを使って、あるいはブラウザで直接、API エンドポイントをテストしてください。
    • スムーズな通信のために、適切な CORS 設定を行いましょう。

このセットアップにより、バックエンドとフロントエンドを明確に分離したフルスタック・アプリケーションを効率的に構築できる。以下のステップに従って、スケーラブルでインタラクティブなウェブアプリを作成しよう。

初心者のためのDjangoと Reactプロジェクト - FullStack Notesアプリを作ろう

Django

セットアップ要件とインストール

Django と React アプリの構築を始める前に、必要なツールと依存関係で開発環境を セットアップすることが重要です。この基盤があれば、Django と React のコンポーネントをスムーズに作成、統合、テストできます。

システム要件とツール

始めるには、開発マシンには Django 用のPython 3.xと React 用のNode.jsが必要です。具体的には、Django 5.0 は Python 3.x が必要で、React は Node.js バージョン 12 以上で動作します。

PythonのインストールPythonは公式サイトから直接ダウンロードするか、システムのパッケージ・マネージャーを使う。macOSユーザーの場合は、Homebrewの brew install pythonで簡単にインストールできる。Windowsユーザーはpython.orgからインストーラーを入手し、LinuxユーザーはUbuntuのapt install python3や他のディストリビューションの同様のコマンドでインストールできる。

Node.jsとnpmのセットアップ:Node.jsにはnpm(Node Package Manager)がバンドルされている。npmのバージョンは6以上で、7.5.4が信頼できる選択です。Node.jsをnodejs.orgからダウンロードすると、自動的にnpmが含まれます。

Python仮想環境:仮想環境を使うことは、プロジェクト固有の依存関係をコンフリクトなく管理するための鍵だ。組み込みのvenvモジュールや、pipenvや virtualenvwrapperのようなツールを使えば、より多くの機能を利用できる。Windowsであれば、virtualenvwrapper-winパッケージが同様の機能を提供します。

インストールを確認するには、ターミナルで以下のコマンドを実行してください:

python --version node --version npm --version

プロジェクト構造の作成

よく整理されたプロジェクト構造は、バックエンドとフロントエンドのコードを分けて管理するために不可欠です。プロジェクトのメインディレクトリを作ることから始めましょう:

mkdir django-react-app cd django-react-app

一つは Django バックエンド用、もう一つは React フロントエンド用です。このように分離することで、各パーツを独立して保守・デプロイできるようになります。

プロジェクトディレクトリ内にPython 仮想環境をセットアップします:

python -m venv venv

仮想環境をアクティブにします:

  • macOS/Linuxの場合:source venv/bin/activate
  • Windowsの場合:venvScriptsactivate

このステップにより、プロジェクトのすべてのPython依存が分離されます。

必要なパッケージのインストール

環境の準備ができたら、Django と React の両方に必要なパッケージをインストールしましょう。

Django バックエンドパッケージ:仮想環境がアクティブなうちに、pip を使って Django とそれをサポートするライブラリをインストールします:

pip install django pip install djangorestframework pip install django-cors-headers
  • Django はサーバサイドのロジック、データベース管理、URL ルーティングを扱います。
  • Django REST Frameworkは RESTful API の構築プロセスを簡略化し、React フロントエンド用のエンドポイントを簡単に作成できます。
  • Django-cors-headers は、Cross-Origin Resource Sharing (CORS) を有効にします。これは、React フロントエンド (3000 番ポートで動作) と Django バックエンド (8000 番ポートで動作) 間の通信に不可欠です。

React フロントエンドのセットアップ:React 環境をセットアップするには、create-react-appツールを使います。このコマンドはReactプロジェクトを初期化し、必要な依存関係をすべてインストールします:

npx create-react-app frontend

これにより、フロントエンドディレクトリに新しいReactプロジェクトが作成され、必要なパッケージ、開発ツール、ビルドスクリプトが揃います。

追加のフロントエンドパッケージ:React プロジェクトをセットアップしたら、frontendディレクトリに移動し、Django API に HTTP リクエストを行うためのライブラリ Axios をインストールします:

cd frontend npm install axios

この時点で、あなたの開発環境には Python 3.x、Django、Node.js、React、そして必要なツールがすべて揃っています。Python 仮想環境はバックエンドの依存関係を確実に分離し、npm は JavaScript パッケージを個別に処理します。これで、フルスタックアプリケーションの構築を開始する準備が整いました!

Django でバックエンドを構築する

データベースモデル、API エンドポイント、React フロントエンドの統合を備えた Django バックエンドをセットアップします。

Django プロジェクトとアプリの作成

設定、データベース設定、アプリ固有のオプションを含む Django プロジェクトを作成することから始めましょう。このプロジェクトの中に、Django アプリ(ユーザデータやコンテンツの管理など、特定のタスクのために設計された Python パッケージ)を構築します。

プロジェクトのルートディレクトリ(仮想環境が設定されている場所)に移動し、 Django プロジェクトを作成します:

django-admin startproject backend .

このコマンドはカレントディレクトリに直接プロジェクトファイルを生成します。manage.py(Djangoコマンド実行用)のような新しいファイルと、settings.pyurls.pyasgi.pywsgi.pyのようなファイルを含むバックエンドディレクトリに気づくでしょう。

次に、特定の機能を扱うアプリを作成します。例えば、タスク管理システムです:

python manage.py startapp tasks

これにより、models.pyviews.pyadmin.pymigrationsフォルダのような必須ファイルを含むtasksディレクトリが作成されます。"django "や "test "のような組み込み名との名前の衝突を避けるようにしてください。

backend/settings.pyINSTALLED_APPSリストに追加して、プロジェクト設定にアプリを登録します:

INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'corsheaders', 'tasks', # アプリの登録 ]。

モデルとシリアライザの設定

Django モデルを使ってデータ構造を定義してください。例えば、タスク管理アプリ用のシンプルなタスクモデルはtasks/models.py に追加できます:

from django.db import models class Task(models.Model): title = models.CharField(max_length=200) description = models.TextField(blank=True) completed = models.BooleanField(default=False) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: ordering = ['-created_at'] def __str__(self): return self.title.

このモデルは、短いテキストのためのCharField、長いコンテンツのためのTextField、true/false値のためのBooleanField、タイムスタンプのためのDateTimeFieldのようなフィールドを含みます。Metaクラスはデフォルトの順序のようなオプションを指定します。

マイグレーションを実行してモデルをデータベースに適用します:

python manage.py makemigrations tasks python manage.py migrate

モデルのデータを JSON に変換するには、 Django REST Framework のシリアライザを使います。tasks/serializers.py で、Taskモデルのシリアライザを定義します:

from rest_framework import serializers from .models import Task class TaskSerializer(serializers.ModelSerializer): class Meta: model = Task fields = ['id', 'title', 'description', 'completed', 'created_at', 'updated_at'] read_only_fields = ['created_at', 'updated_at'] read_only_fields = ['created_at', 'updated_at'

ModelSerializerは、モデルに基づいてフィールドとメソッドを自動的に生成します。フィールドを明示的に列挙することで、センシティブなデータを意図せず公開することがないようにします。

API エンドポイントの構築

Django REST Framework は API の作成を簡単にします。標準的な CRUD 操作には、ルータ付きのViewSets を使って、すっきりとした RESTful な構造にします。

tasks/views.py で API ビューを作成します:

from rest_framework import viewsets from rest_framework.permissions import AllowAny from .models import Task from .serializers import TaskSerializer class TaskViewSet(viewsets.ModelViewSet): queryset = Task.objects.all() serializer_class = TaskSerializer permission_classes = [AllowAny] # 開発用のみ

ModelViewSetは、タスクの一覧、作成、取得、更新、削除を自動的に処理します。

tasks/urls.py で URL ルーティングを設定します:

from django.urls import path, include from rest_framework.routers import DefaultRouter from .views import TaskViewSet router = DefaultRouter() router.register(r'tasks', TaskViewSet) urlpatterns = [ path('api/', include(router.urls)), ]。

これらの URL をメインのbackend/urls.pyファイルにインクルードします:

from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('tasks.urls')), ]。

CORSヘッダーの設定

React フロントエンド (3000 番ポートで動作) が Django バックエンド (8000 番ポートで動作) と通信できるようにするには、Cross-Origin Resource Sharing (CORS) を設定します。これがないと、ブラウザはセキュリティ上の理由でクロスオリジンリクエストをブロックします。

バックエンド/settings.py を更新して CORS 設定を追加してください:

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',  # Add this at the top
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] # 開発用の CORS 設定 CORS_ALLOWED_ORIGINS = [ "http://localhost:3000", # React 開発サーバ "http://127.0.0.1:3000", ] CORS_ALLOW_CREDENTIALS = True

迅速なテストには、CORS_ALLOW_ORIGINS = Trueを使用できますが、許可されるオリジンを指定する方が安全です。

APIエンドポイントのテスト

React フロントエンドを統合する前に、API エンドポイントをテストして、期待通りに動作することを確認してください。Django 開発サーバを起動します:

python manage.py runserver

http://127.0.0.1:8000/api/tasks/ で API にアクセスしてください。閲覧可能な API を使って、GET や POST リクエストのような操作をテストしてください。

あるいは、 cURL や Postman を使ってテストしてください:

# Test GET request to list tasks curl -X GET http://127.0.0.1:8000/api/tasks/ # Test POST request to create a task curl -X POST http://127.0.0.1:8000/api/tasks/ ■ -H "Content-Type: application/json" ■ -d '{"title":「これはテストタスクです:"これはテストタスクです"}'

自動テストのために、tasks/tests.pyにテストケースを追加します:

from rest_framework.test import APITestCase from rest_framework import status from .models import Task class TaskAPITestCase(APITestCase): def test_create_task(self): # ここにアサーションとテストロジックを追加する pass

バックエンドができたので、Reactフロントエンドに接続する準備ができました。

Reactでフロントエンドを構築する

Django バックエンドの魅力的なインタフェースを作成するために、React を使ってユーザとのインタラクションを管理します。

React プロジェクトのセットアップ

Create React App を使って、React フロントエンドのセットアップから始めましょう。プロジェクトのルートディレクトリ(Djangoバックエンドがある場所)に移動して実行します:

npx create-react-app frontend cd frontend

このコマンドは、package.jsonsrc/App.jspublic/index.html などの必須ファイルを含む React アプリをセットアップします。また、バンドル用のwebpack、JavaScriptコンパイル用のBabel、テスト用の開発サーバーなどのツールも含まれている。

次に、Django API への HTTP リクエストを処理する Axios をインストールします:

npm install axios

Axios は JSON の解析を管理し、組み込みのfetch()関数よりも優れたエラーハンドリングを提供することで、API 呼び出しをよりシンプルにします。また、リクエストやレスポンスのインターセプタのような機能もサポートしています。

フォルダ構造は以下のようになっているはずだ:

project-root/ ├── backend/ │ ├── manage.py │ ├── backend/ │ └── tasks/ └── frontend/ ├── package.json ├── public/ └── src/

動作確認のため、React開発サーバーを起動する:

npm start

これで、http://localhost:3000、アプリが起動し、デフォルトのReactウェルカムページが表示される。開発中はこのサーバーを起動したままにしておくと、変更を加えたときに自動的にリロードされます。

Reactコンポーネントの作成

Django API から取得したタスクを表示するTaskListコンポーネントを作成しましょう。src/components/TaskList.js に以下を追加してください:

import React from 'react'; const TaskList = ({ tasks, onToggleComplete, onDeleteTask }) => { return ( <div className="task-list"> <h2>Your Tasks</h2> {tasks.length === 0 ? ( <p>No tasks available.最初のタスクを作成してください!</p> ) : ( <ul> {tasks.map((task) => ( <li key={task.id} className={`task-item ${task.completed ?'completed' : ''}`}> <div className="task-content"> <h3>{task.title}</h3> <p>{task.description}</p> <small>Created:{'btn-undo'ボタンをクリックすると、'btn-undo'ボタンが表示されます。'btn-undo' : 'btn-complete'} > {task.completed ?'Undo' : 'Complete'} </button> <button onClick={() => onDeleteTask(task.id)}クラス名="btn-delete" >削除 </button> </div> </li> ))} </ul> )} </div> ); }; export default TaskList;

次に、新しいタスクを追加するためのTaskFormコンポーネントを作成します。これをsrc/components/TaskForm.js に追加します:

import React, { useState } from 'react'; const TaskForm = ({ onAddTask }) => { const [title, setTitle] = useState(''); const [description, setDescription] = useState(''); const [isSubmitting, setIsSubmitting] = useState(false); const handleSubmit = async (e) => { e.preventDefault(); if (!title.trim()) return; setIsSubmitting(true); try { await onAddTask({ title: title.trim(), description: description.trim() }); setTitle(''); setDescription(''); } catch (error) { console.error('Error adding task:', error); } finally { setIsSubmitting(false); } } }; return ( <form onSubmit={handleSubmit} className="task-form"> <h2>Add New Task</h2> <div className="form-group"> <input type="text" placeholder="タスクタイトル" value={title} onChange={(e) => setTitle(e. target.target.value)}disabled={isSubmitting}必須 /> </div> <div className="form-group"> <textarea placeholder="タスクの説明(任意)" value={description} onChange={(e) => setDescription(e. target.target.value)} disabled={isSubmitting} rows="3" /> </div> <button type="submit" disabled={isSubmitting || !title.trim()}> {isSubmitting ?'Adding...' : 'Add Task'} </button> </form> ); }; export default TaskForm;

基本的なスタイリングのために、src/App.cssファイルを作成し、以下を追加します:

.task-list { margin: 20px 0; } .task-item { display: flex; justify-content: space-between; align-items: center; paddingalign-items: center; padding: 15px; border1px solid #ddd; margin-bottomborder: 1px solid #ddd; margin-bottom: 10px; border-radius: 5px; } .task-item.completed { background-color#text-decoration: line-through; opacity: 0.7; } .task-form { background#paddingborder-radius: 5px; margin-bottom: 20px; } .form-group { margin-bottom15px; } .form-group input, .form-group textarea { width: 100%; padding10px; border1px solid #ddd; border-radius3px; } .btn-complete, .btn-undo, .btn-delete { margin-left: 10px; padding5px 10px; border: none; border-radius3px; cursor: pointer; } .btn-complete { background#color: white; } .btn-undo { background#color: black; } .btn-delete { backgroundcolor: 白; } .btn-delete { background: #dc3545; color: 黒

ステートの管理とAPIの統合

useStateuseEffect のような React フックを使えば、ステートの管理と Django バックエンドとのやり取りが簡単になります。API 呼び出しを一元化するには、サービスファイルsrc/services/api.js を作成します:

import axios from 'axios'; const API_BASE_URL = 'http://127.0.0.1:8000/api'; const api = axios.create({ baseURL:API_BASE_URL, headers:{'Content-Type': 'application/json', }, }); export const taskAPI = { getTasks: () => api.get('/tasks/'), createTask: (taskData) => api.post('/tasks/', taskData), updateTask: (taskId, taskData) => api.put(`/tasks/${taskId}/`, taskData), deleteTask: (taskId) => api.delete(`/tasks/${taskId}/`), }; export default api;

最後に、すべてをsrc/App.jsに統合する:

import React, { useState, useEffect } from 'react'; import TaskList from './components/TaskList'; import TaskForm from './components/TaskForm'; import { taskAPI } from './services/api'; import './App.css'; function App() { const [tasks, setTasks] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { fetchTasks(); }, []); const fetchTasks = async () => { try { setLoading(true); const response = await taskAPI.getTasks(); setTasks(response.data); } catch (err) { setError(err); } finally { setLoading(false); } }; // タスクの追加、更新、削除のための追加のメソッドは、ここに置く } // このセットアップは、Reactのフロントエンドのためのものです。

このセットアップで、あなたの React フロントエンドは、Django バックエンドとシームレスに通信しながら、インタラクティブにタスクを処理する準備ができました。

background image
サーバーが成長を妨げていませんか?

遅いデプロイメントや帯域幅の制限にうんざりしていませんか?FDC Serversは、瞬時の専用電源、グローバルリーチ、あらゆる規模に対応する柔軟なプランを提供します。アップグレードの準備はできましたか?

今すぐパフォーマンスのロックを解除

Django と React を接続する

バックエンドとフロントエンドが稼働したら、次のステップは両者間の円滑な通信を確保することです。これには、API エンドポイントの設定、リクエストの管理、統合の不具合への対処が含まれます。

ReactでAPI URLを設定する

React アプリは、Django API エンドポイントの場所を知っている必要があります。これを実現するには、src/services/api.jsファイルを環境固有の設定で更新します:

import axios from 'axios'; // 環境に応じて API ベース URL を決定 const getApiBaseUrl = () => { if (process.env.NODE_ENV === 'production') { return process.env.REACT_APP_API_URL || 'https://your-production-domain.com/api'; } return 'http://127.0.0.1:8000/api'; }; const API_BASE_URL = getApiBaseUrl(); const api = axios.create({ baseURL:API_BASE_URL, headers:{Content-Type': 'application/json', }, timeout:10000, // 10秒のタイムアウト }); export const taskAPI = { getTasks: () => api.get('/tasks/'), createTask: (taskData) => api.post('/tasks/', taskData), updateTask: (taskId, taskData) => api.put(`/tasks/${taskId}/`, taskData), deleteTask: (taskId) => api.delete(`/tasks/${taskId}/`), }; export default api;

本番環境では、Reactプロジェクトのルートに以下の内容の.envファイルを追加します:

react_app_api_url=https://your-production-domain.com/api

この設定により、ローカルの開発環境でも本番環境へのデプロイでも、React アプリが Django バックエンドとシームレスにやり取りできるようになります。API エンドポイントを設定したら、バックエンドのデータを取得して操作する準備ができました。

バックエンドからのデータ取得

API 設定が完了したら、React と Django 間でデータを管理するための CRUD 操作を実行できます。これらの操作を扱うためにsrc/App.js を更新します:

import React, { useState, useEffect } from 'react'; import TaskList from './components/TaskList'; import TaskForm from './components/TaskForm'; import { taskAPI } from './services/api'; import './App.css'; function App() { const [tasks, setTasks] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() =&.gt; { fetchTasks(); }, []); const fetchTasks = async () => { try { setLoading(true); setError(null); const response = await taskAPI.setTasks(response.data); } catch (err) { setError('Failed to fetch tasks. Please check your connection.'); console.error('Error fetching tasks:', err); } finally { setLoading(false); } }; const handleAddTask = async (taskData) => { try { const response = await taskAPI.createTask(taskData); setTasks(prevTasks => [...prevTasks, response.data]); } catch (err) { console.error('Error adding task:', err); throw err; // TaskFormにエラーを処理させるために再スロー } }; const handleToggleComplete = async (taskId, completed) => { try { const taskToUpdate = tasks.find(task => task.id === taskId); const updatedTaskData = { ....taskToUpdate, completed }; const response = await taskAPI.updateTask(taskId, updatedTaskData); setTasks(prevTasks => prevTasks.map(task => task.id === taskId ? response.data : task ); } catch (err) { console.error('タスク更新エラー:', err); } }; const handleDeleteTask = async (taskId) => { if (!window.confirm('Are you sure you want to delete this task?')) { return; } try { await (taskId => task.id ===?{ return; } try { await taskAPI.deleteTask(taskId); setTasks(prevTasks => prevTasks.filter(task => task.id !== taskId)); } catch (err) { console.error('タスク削除エラー:', err); } }; if (loading) { return <div className="loading">タスクのロード中....</div>; } return ( <div className="App"> <header className="App-header"> <h1>Task Manager</h1> </header> <main className="コンテナ"> {エラー&& <div className="エラーメッセージ">{エラー}</div>} <TaskForm onAddTask={ハンドルAddTask}。/> <TaskList tasks={tasks} onToggleComplete={handleToggleComplete} onDeleteTask={handleDeleteTask} /> </main> </div> ); } export default App;

このコードは、タスクの作成、更新、削除、エラー管理を処理します。UIはスムーズなユーザーエクスペリエンスのために即座に更新され、エラーは変更を戻すか適切なメッセージを表示することで優雅に管理されます。

接続のテストとデバッグ

Django と React をリンクする際に最も一般的なハードルの一つは、CORS (Cross-Origin Resource Sharing) エラーへの対処です。これは、ブラウザがセキュリティ上の理由から異なるオリジン間のリクエストをブロックするために発生します。開発中、React は通常localhost:3000 で動作し、 Django はlocalhost:8000 で動作するため、クロスオリジンシナリオが発生します。

CORS の問題に対処するには、"CORS ヘッダの設定" で説明したように、Django の設定で CORS ヘッダを設定したことを確認してください。変更したら、Django サーバを再起動して適用してください。

よくある API リクエストエラーとその解決策をいくつか紹介します:

  • HTTP 400 (Bad Request):HTTP 400 (Bad Request): これは通常、リクエストのペイロードに必要なデータが欠落し ているか、不正な形式になっていることを意味します。例えば、2023 年 11 月、FintanMi は Django REST Framework と React プロジェクトでコミュニティを作成する際、リクエストにownerフィールドがなかったため 400 エラーに遭遇しました。フロントエンドが Django モデルが期待するすべての必須フィールドを送信しているか、常に再チェックしてください。
  • HTTP 405 (Method Not Allowed):これは API エンドポイントが使用している HTTP メソッドをサポートしていない場合に発生します。例えば、 FintanMi は投稿を削除しようとすると 405 エラーが発生すると報告しましたが、Django のビューをgenerics.RetrieveUpdateAPIViewからgenerics.RetrieveUpdateDestroyAPIViewに更新してDELETEリクエストをサポートするようにすることで解決しました。

アプリの実行とテスト

Django バックエンドと React フロントエンドが接続されたら、両方の開発サーバを起動し、アプリケーショ ンをテストしましょう。これには、2つのサーバを同時に起動し、すべてがスムーズに連動することを確認する必要があります。

開発サーバの起動

Django-React アプリケーションを実行するには、ターミナルウィンドウが2つ必要です。このセットアップにより、バックエンドとフロントエンドが独立して動作し、API 呼び出しで通信できます。

Django バックエンドサーバを起動します:

  1. 最初のターミナルウィンドウを開き、 Django プロジェクトのルートディレクトリに移動します。

  2. Python 仮想環境を有効にします:

    ソース venv/bin/activate
    
  3. Django 開発サーバを起動します:

    python manage.py runserver
    

    サーバはhttp://127.0.0.1:8000/ で利用できるようになります。

React フロントエンドサーバの起動

  1. 2つ目のターミナルウィンドウを開き、Reactプロジェクトのディレクトリに移動します:

    cd frontend
    
  2. React開発サーバーを起動します:

    npm start
    

    これにより、http://localhost:3000/ でブラウザウィンドウが自動的に開きます

両方のサーバーが起動したら、アプリケーションの機能テストを開始できます。

アプリの全機能をテストする

サーバーが稼働し、CORSとAPIエンドポイントが適切に設定されたら、いよいよフロントエンドとバックエンド間のデータフローを検証します。

バックエンド API の検証:

  • Django API のエンドポイントを直接テストしてみましょう:

    http://localhost:8000/api/tasks にアクセスしてください。
    

    Django REST Framework の閲覧可能な API インタフェースが表示され、そこで CREATE や READ 操作ができるはずです。

  • Django の管理インターフェイスにアクセスしてください:

    http://localhost:8000/admin
    

    スーパーユーザの認証情報でログインし、タスクを作成、編集、削除してください。また、UPDATE や DELETE 操作のテストもできます:

    http://localhost:8000/api/tasks/{id}
    

フロントエンドとバックエンドの統合テスト:

  • http://localhost:3000で React アプリを開き、正しくロードされ、 Django バックエンドからタスクが表示されることを確認してください。
  • 各 CRUD 操作を React インタフェースでテストしてください:- 新しいタスクを追加し、React UI とバックエンドの両方に表示されることを確認します。
    • 既存のタスクを編集し、変更が保存されていることを確認します。
    • タスクを削除し、フロントエンドとデータベースの両方から削除されることを確認する。

アプリにフィルターやその他の機能が含まれている場合は、それらを徹底的にテストして、タスクが期待通りに表示されることを確認します。

よくある問題の修正

テスト中に問題が発生した場合は、以下の一般的な修正方法をお試しください。

API接続エラー:

  • 両方のサーバがそれぞれのポートで動作していることを確認してください:Django はhttp://localhost:8000で、React はhttp://localhost:3000 です。

  • ブラウザの開発者ツール(ネットワークタブ)を使って、404 や 500 のような HTTP ステータスコードを確認してください。

  • React プロジェクトのpackage.jsonファイルのプロキシ設定を確認してください:

    "proxy":"http://localhost:8000"
    

    変更した場合は、Reactサーバーを再起動してください。

サーバ起動の問題:

  • Django サーバが起動しない場合、migrations が抜けていないか確認してください:

    python manage.py makemigrations python manage.py migrate
    
  • React サーバの問題は、依存関係を再インストールしてみてください:

    npm install
    

データフローの問題:

  • ブラウザの開発者ツールを使って、ネットワークリクエストとコンソールエラーを検査する。
  • React のconsole.log()や Django のビューのprint文のようなデバッグ文を追加して、データフローをトレースしてください。
  • React アプリの API URL が、Django の URL パターンと、末尾のスラッシュ (例えば/api/tasks/) を含めて正確に一致しているか再確認してください。

まとめと次のステップ

あなたは Django と React を組み合わせたウェブアプリを作成し、フルスタック開発への確かな入門をしました。このプロジェクトでは、バックエンドとフロントエンドの分離、CRUD 操作の実行、CORS 設定を使用したクロスオリジンリクエストの管理など、本質的な概念にスポットを当てています。その過程で、Django REST Frameworkを使用してAPIを構築し、Reactフックを使用して状態を管理します - この2つの強力なツール間のスムーズな統合を可能にするスキルです。

アプリを次のレベルへ

アプリの機能を拡張する余地はたくさんあります。例えば、Django REST Framework を使ってJWT 認証を追加し、ユーザデータと API アクセスをセキュアにすることができます。これにより、ユーザ固有の機能やパーソナライズされた体験を提供できるようになります。

アプリにリアルタイムのアップデートが必要なら、Django Channels を使ってWebSocket サポートを有効にすることを検討してください。これはライブダッシュボード、チャットシステム、通知などの機能に最適で、アプリをよりダイナミックでインタラクティブなプラットフォームに変えます。

アプリが成長するにつれて、高度なデータの可視化が重要になります。Reactのレンダリング機能と効率的なバックエンドのデータ取得を組み合わせることで、複雑なデータセットを効果的に処理して表示できるようになります。

本番環境の準備

アプリを本番用に準備する際には、デプロイメント、セキュリティ、パフォーマンスに重点を置きましょう。現在の設定はローカルでの開発には最適ですが、本番環境では追加のステップが必要です。これには、環境変数の設定、データベースの最適化、強力なエラー処理メカニズムの実装などが含まれます。

これらの改善は、APIの設計、コンポーネントベースのアーキテクチャ、フルスタックの統合など、あなたがすでに開発したスキルの上に構築されます。これらの高度なテクニックを習得することで、エンタープライズレベルのプロジェクトに取り組むための十分な準備が整い、Web 開発者として成長し続けることができます。

よくある質問

Webアプリの構築において、バックエンドにDjango、フロントエンドにReactを使うメリットは何ですか?

バックエンドに Django を使い、フロントエンドに React を使うことで、最新の Web アプリケーションを開発するための強力な融合が生まれます。Django はバックエンド開発を効率化するツールが詰まった強固なフレームワークを提供し、React はダイナミックでインタラクティブなユーザインタフェースの構築で輝きます。

この組み合わせは、責任の明確な分離を促進し、コードベースの整理と長期的な拡張を容易にします。React のコンポーネントベースの構造は UI 要素の再利用を促し、Django の REST Framework は API 構築のプロセスを簡素化し、フロントエンドとバックエンド間のスムーズなコミュニケーションを保証します。これらを組み合わせることで、高速で効率的な、ユーザ中心のアプリケーション開発を実現します。

React フロントエンドを Django バックエンドに接続する際、CORS の問題を解決するには?

React フロントエンドと Django バックエンド間の CORS 問題に対処するには、django-cors-headersパッケージが便利です。まず、pip を使ってインストールします。それから、settings.pyファイルで、INSTALLED_APPSリストに'corsheaders' を追加します。その後、'corsheaders.middleware.CorsMiddleware'MIDDLEWAREリストの一番上にインクルードして、ミドルウェアの実行順序を適切にします。

開発中、settings.pyで CORS_ORIGIN_ALLOW_ALL = Trueを設定することで簡略化できます。これはどのオリジンからのリクエストも許可します。しかし、本番環境では、CORS_ALLOWED_ORIGINS設定を使って特定の信頼できるドメインを定義する方がずっと安全です。このアプローチは、より厳重なセキュリティを維持するのに役立ちます。

この設定により、React アプリは CORS 要件に準拠しながら、Django API とスムーズにやり取りできます。

本番デプロイ用に Django と React アプリを準備するには?

Django と React アプリを本番用に準備するには、まず Django の設定をセキュアに調整することから始めましょう。これには、DEBUG を False に設定することと、どのドメインがアプリにアクセスできるかを制御するためにALLOWED_HOSTSを指定することが含まれます。これらの変更は、ライブ環境でアプリケーションを保護するために不可欠です。

次に、Django バックエンドと静的ファイルのために、信頼できるホスティングプラットフォームを選 択します。インフラが、本番レベルのトラフィックと需要に対応できるように構築されていることを確認してください。React フロントエンドには、適切なビルドツールを使って最適化された本番ビルドを生成します。

React アプリの準備ができたら、Nginx のようなウェブサーバをセットアップして、React フロントエンドと Django バックエンドの両方にサービスを提供します。適切なサーバー設定により、アプリが効率的に実行され、ユーザーにシームレスなエクスペリエンスを提供できるようになります。

本番稼動する前に、本番環境でアプリを徹底的にテストしましょう。このステップでは、あらゆる問題を特定して解決し、アプリが起動後に確実に動作するようにします。

ブログ

今週の特集

その他の記事
専用サーバーやVPSの監視、2025年のオプションは?

専用サーバーやVPSの監視、2025年のオプションは?

AI、自動化、リアルタイム分析に焦点を当てた、2025年における専用サーバーとVPSのための最高の監視ツールを探る。

12分で読めます - 2025年11月28日

AIワークロードに最適なGPUサーバーの選び方

10分で読めます - 2025年10月15日

その他の記事
background image

ご質問またはカスタムソリューションが必要ですか?

icon

柔軟なオプション

icon

グローバル・リーチ

icon

即時配備

icon

柔軟なオプション

icon

グローバル・リーチ

icon

即時配備