Tailwind CSSでスタイリングを効率化:ReactJSとDjangoで美しいUIを構築

2024-07-27

ReactJSとDjangoを使ってリアルなウェブアプリケーションを構築する方法

ReactJSとDjangoは、それぞれ単独でも強力なツールですが、組み合わせることで、ユーザーインターフェースとバックエンドをシームレスに連携させた、高度なウェブアプリケーションを構築することができます。このチュートリアルでは、ReactJSとDjangoを使ってリアルなウェブアプリケーションを構築する方法を、分かりやすく説明していきます。

ステップ1:プロジェクトのセットアップ

  1. Djangoプロジェクトの作成

    • django-admin startproject myproject コマンドを実行して、Djangoプロジェクトを作成します。
    • cd myproject コマンドで、プロジェクトディレクトリに移動します。
    • python manage.py startapp myapp コマンドを実行して、Djangoアプリを作成します。
  2. Reactアプリケーションの作成

    • npx create-react-app myreact コマンドを実行して、Reactアプリケーションを作成します。
    • cd myreact コマンドで、Reactアプリケーションディレクトリに移動します。

ステップ2:APIエンドポイントの作成

  1. Django REST Frameworkのインストール

  2. シリアライザーの作成

  3. ビューの作成

  4. URLルーティングの設定

  5. プロジェクトのURLルーティングにmyappのURLルーティングを追加

    • myproject/urls.py ファイルを開き、myapp アプリのURLルーティングを urlpatterns リストに追加します。

ステップ3:ReactアプリケーションとDjango APIの接続

  1. Axiosのインストール

  2. ReactコンポーネントでAxiosを使用してAPIエンドポイントにアクセス

    • Reactコンポーネント内で、Axiosを使用してDjango APIエンドポイントにアクセスし、データを取得します。
  3. 取得したデータをReactコンポーネントのUIに表示

ステップ4:デプロイ

  1. Djangoアプリケーションをデプロイ

    • HerokuやAWSなどのプラットフォームにDjangoアプリケーションをデプロイします。
  2. ビルドされたReactアプリケーションを静的ファイルホスティングサービスにデプロイ

    • S3やNetlifyなどの静的ファイルホスティングサービスにビルドされたReactアプリケーションをデプロイします。
  • このチュートリアルは、あくまで基本的な手順を説明しています。実際のアプリケーション開発では、より多くの設定や機能が必要になる場合があります。



models.py

from django.db import models

class Task(models.Model):
    title = models.CharField(max_length=255)
    completed = models.BooleanField(default=False)

serializers.py

from rest_framework import serializers
from .models import Task

class TaskSerializer(serializers.ModelSerializer):
    class Meta:
        model = Task
        fields = ['id', 'title', 'completed']

views.py

from django.shortcuts import render
from .models import Task
from .serializers import TaskSerializer
from rest_framework import viewsets

class TaskViewSet(viewsets.ModelViewSet):
    queryset = Task.objects.all()
    serializer_class = TaskSerializer

urls.py

from django.urls import path, include
from .views import TaskViewSet

urlpatterns = [
    path('tasks/', TaskViewSet.as_view({'get': 'list', 'post': 'create'}), name='task-list'),
    path('tasks/<int:pk>/', TaskViewSet.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'}), name='task-detail'),
]

React部分

App.js

import React, { useState, useEffect } from 'react';
import axios from 'axios';

const App = () => {
  const [tasks, setTasks] = useState([]);

  useEffect(() => {
    const fetchTasks = async () => {
      const response = await axios.get('http://localhost:8000/tasks/');
      setTasks(response.data);
    };

    fetchTasks();
  }, []);

  const addTask = async (title) => {
    const response = await axios.post('http://localhost:8000/tasks/', { title: title });
    setTasks([...tasks, response.data]);
  };

  const toggleTaskCompletion = async (id, completed) => {
    await axios.put(`http://localhost:8000/tasks/${id}/`, { completed: completed });
    setTasks(tasks.map((task) => task.id === id ? { ...task, completed: completed } : task));
  };

  const deleteTask = async (id) => {
    await axios.delete(`http://localhost:8000/tasks/${id}/`);
    setTasks(tasks.filter((task) => task.id !== id));
  };

  return (
    <div>
      <h1>Todo App</h1>
      <form onSubmit={(e) => {
        e.preventDefault();
        const title = e.target.elements.title.value;
        if (title) {
          addTask(title);
          e.target.elements.title.value = '';
        }
      }}>
        <input type="text" name="title" placeholder="タスクを追加" />
        <button type="submit">追加</button>
      </form>
      <ul>
        {tasks.map((task) => (
          <li key={task.id}>
            <input type="checkbox" checked={task.completed} onChange={() => toggleTaskCompletion(task.id, !task.completed)} />
            {task.title}
            <button onClick={() => deleteTask(task.id)}>削除</button>
          </li>
        ))}
      </ul>
    </div>
  );
};

export default App;



APIフレームワーク

認証・認可


reactjs django



ラジオボタン単一選択方法

HTMLラジオボタンは <input type="radio"> タグを使用します。同じ名前のラジオボタンは、グループとして扱われます。つまり、グループ内のラジオボタンは一度に一つしか選択できません。DjangoDjango のフォームクラスでラジオボタンフィールドを作成し、同じ name 属性を与えることで、HTML と同様の挙動を実現します。...


DjangoのフォームにおけるCSSスタイリング

Djangoのフォームは、ユーザーがデータを入力するためのインタフェースを提供します。デフォルトでは、これらのフォームはシンプルなHTML要素を使用してレンダリングされます。しかし、多くの場合、サイトの外観やスタイルに合わせるために、CSSを使用してフォームをカスタマイズする必要があります。...


フレームワークの壁を超えて:AngularJSとDjangoでシームレスな開発を実現する

AngularJSとDjangoのテンプレートタグの競合問題は、主に以下の2つのケースで発生します。同じ名前のテンプレートタグ AngularJSとDjangoは、テンプレート処理に使用するタグに同じ名前を使用することがあります。例えば、ng-ifという名前のタグは、AngularJSでは条件分岐処理に使用されますが、Djangoではテンプレートファイルの読み込みに使用されます。...


Django複数オブジェクト削除 解説

削除ボタン 全てのチェックされたオブジェクトを削除するボタン。チェックボックスフィールド 削除したいオブジェクトの横にチェックボックスを配置します。モデルの削除 get_list_or_404で複数のオブジェクトを取得し、delete()メソッドで削除します。...


【保存版】Djangoテンプレート挿入の完全ガイド:extendsとincludeを超えて

テンプレート継承は、共通レイアウトを持つ複数のテンプレートを作成する場合に便利です。ベーステンプレート (base. html)個別テンプレート (index. html)上記のように、base. html を extends することで、index...



SQL SQL SQL SQL Amazon で見る



Django-formsでフォームにCSSスタイルを適用する

静的ファイルを使用するDjangoでは、staticfiles ディレクトリに保存された静的ファイル (CSS、JavaScript、画像など) を配信することができます。手順プロジェクトディレクトリに staticfiles ディレクトリを作成します。


Django テンプレートで JavaScript へ変数渡し

Django テンプレート内で、views. py にある変数を直接 JavaScript で使うことはできません。なぜなら、テンプレートはレンダリング時に変数を HTML に置き換え、JavaScript はレンダリングされた後の静的な HTML ファイルを読み込むからです。


CSRF対策もバッチリ!Django認証とAjaxで安全なログインページを作る

この解説を理解するには、以下の知識が必要です。Ajaxの基本Djangoフレームワークの基本PythonプログラミングDjangoでは、@login_requiredデコレータを使用して、ログインが必要なURLを指定できます。このデコレータは、ユーザーがログインしていない場合、ログインページにリダイレクトします。


Django Admin CSS 読み込みトラブルシューティング

Django Admin サイトのスタイルシート(CSS)が正しく読み込まれない場合、その原因は主に以下の要因に起因します:静的ファイルの設定STATIC_ROOT この設定は、静的ファイルの実際のファイルシステム上のディレクトリを指定します。これは、collectstatic コマンドで静的ファイルを収集する際に使用されます。


Django Admin の使いにくいManyToManyフィールドを救う!JavaScriptで超快適なSelect2ウィジェットに

JavaScript ライブラリ(例:Select2、Chosen)Django-AdminDjangoJavaScript ライブラリを選択するまず、使用する JavaScript ライブラリを選択する必要があります。人気のある選択肢には、Select2 と Chosen があります。どちらも、検索、フィルタリング、複数選択などの機能を提供します。