9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python, Django でTodoアプリ作成の足がかり

Last updated at Posted at 2024-10-07

昔作った簡単なTodoアプリを今風に書き換えてみる

環境:

  • Windows11
  • Python3.12.6
  • Django 5.1
  • SQLite

ステップ1: Pythonのインストール

Microsoftストアからいれる

ステップ2: 仮想環境の作成とアクティベーション

プロジェクトごとに異なる依存関係を持つように、仮想環境を作成する。

# 仮想環境を作成するディレクトリに移動
cd path\to\your\project\directory

# 仮想環境を作成
python -m venv myenv

# 仮想環境をアクティベート
myenv\Scripts\activate

※venvの有効化に失敗することがあるが、以下を実行する

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

ステップ3: Djangoのインストール

# Djangoをインストール
pip install django

ステップ4: Djangoプロジェクトの作成

# プロジェクトを作成
django-admin startproject todo_project

# ディレクトリに移動
cd todo_project
# サーバーを起動
python manage.py runserver

※起動したら一旦CTRL‐Cで落としておく

ステップ5: Todoアプリを作成

Todoアプリを作成する

python manage.py startapp todo_app

ステップ6: モデルの作成

todo_app/models.py を編集して、Todoアイテムのモデルを作る

from django.db import models

class TodoItem(models.Model):
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    is_done = models.BooleanField(default=False)

モデルをDBに反映させる

python manage.py makemigrations todo_app
python manage.py migrate

ステップ7: ビューの作成

todo_app/views.py を編集してビューを作成する

from django.shortcuts import render, redirect
from .models import TodoItem

def todo_list(request):
    items = TodoItem.objects.order_by('-created_at')
    return render(request, 'todo_app/todo_list.html', {'items': items})

def add_todo_item(request):
    if request.method == 'POST':
        content = request.POST['content']
        if content:
            TodoItem.objects.create(content=content)
        return redirect('todo_list')
    return render(request, 'todo_app/add_todo_item.html')

def delete_todo_item(request, item_id):
    if request.method == 'POST':
        item = TodoItem.objects.get(id=item_id)
        item.delete()
    return redirect('todo_list')

ステップ8: URLの設定

todo_app/urls.py を新規作成し、TodoアプリのURLを設定する。

from django.urls import path
from . import views

app_name = 'todo_app'

urlpatterns = [
    path('', views.todo_list, name='todo_list'),
    path('add/', views.add_todo_item, name='add_todo_item'),
    path('delete/<int:item_id>/', views.delete_todo_item, name='delete_todo_item'),
]

todo_project/urls.py を編集して、TodoアプリのURLをインクルードする。

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

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

ステップ9: テンプレートの作成

todo_app/templates/todo_app ディレクトリを作成し、以下の2つのHTMLファイルを作成する。

todo_list.html:

<!DOCTYPE html>
<html>
    <head>
        <title>Todo List</title>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" />
    </head>
    <body>
        <div class="container">
            <h2>Todo List</h2>
            <form method="post" action="{% url 'todo_app:add_todo_item' %}">{% csrf_token %} <input type="text" name="content" placeholder="Add new todo..." /> <button type="submit" class="btn btn-primary">Add</button></form>
            <ul class="list-group mt-3">
                {% for item in items %}
                <li class="list-group-item d-flex justify-content-between">
                    {{ item.content }}
                    <form method="post" action="{% url 'todo_app:delete_todo_item' item.id %}">{% csrf_token %} <button type="submit" class="btn btn-danger btn-sm">Delete</button></form>
                </li>
                {% endfor %}
            </ul>
        </div>
        <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.2/dist/js/bootstrap.bundle.min.js"></script>
    </body>
</html>

ステップ10: 管理画面の設定

Django管理画面からTodoアイテムを管理できるようにtodo_app/admin.py を編集する。

from django.contrib import admin
from .models import TodoItem

admin.site.register(TodoItem)

ステップ11: アプリの起動

基本設定が済んだので、サーバーを起動して動作確認。

python manage.py runserver

注意点など

  • このTodoアプリは基本的な機能しか持っていないので、機能やセキュリティ強化は別途実装が必要。
  • BootStrapはCDNを使用しているため、ローカルで使用する場合は要ダウンロード。
  • SECRET_KEYやDBの設定など、本番環境にデプロイする際にはセキュリティ確保の措置が必要。
9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?