데이터 분석&엔지니어링 캠프

Django - ToDoList 프로젝트 (3)

ms2063 2024. 1. 29. 01:11

본 글은 django를 활용하여 ToDoList 프로젝트를 설명하기 위해 작성되었습니다.

 

my_to_do_app 폴더 내에 있는 views.py 파일을 아래와 같이 수정합니다.

from django.shortcuts import render
from django.http import HttpResponse
from .models import * 

# Create your views here.
'''
def index(request):
   return HttpResponse("My_to_do_app first page")
'''

def index(request):
    return render(request, "my_to_do_app/index.html")

def createTodo(request):
    user_input_str = request.POST['todoContent']
    new_todo = Todo(content = user_input_str)
    new_todo.save()
    return HttpResponse("create Todo를 할 거야! => " + user_input_str)

 

 

dbshell에 접근하여 정상적으로 데이터가 저장되는지 확인합니다.

 

본인은 이미 한 번 작성을 했기 때문에 위와 같이 표시가 되는 점 확인 바랍니다.

 

다음으로, 메인 페이지로 돌아가기 위해 url로 돌아가기 위해 urls.py를 수정합니다.

from django.urls import path 
from . import views 

urlpatterns = [
    path('', views.index, name="index"), 
    path('createTodo/', views.createTodo, name="createTodo")
]

 

다음으로, my_to_do_app/views.py 파일을 아래와 같이 수정합니다.

from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse
from .models import *

# Create your views here.
def index(request):
    # DB에서 데이터를 받아서 index.html 뿌려주기
    todos = Todo.objects.all()
    content = {
        "todos" : todos
    }
    return render(request, "my_to_do_app/index.html", content)

def createTodo(request):
    user_input_str = request.POST['todoContent']
    new_todo = Todo(content = user_input_str)

    # 데이터 DB에 저장
    new_todo.save() 
    # return HttpResponse("create ToDo를 하자" + user_input_str)
    return HttpResponseRedirect(reverse('index'))

 

데이터를 처리할 수 있도록 index.html 파일을 수정합니다.

  <div class="toDoDiv">
                <ul class="list-group">
                    {% for todo in todos %}
                    <form action="" method="GET">
                        <div class="input-group" name='todo1'>
                            <li class="list-group-item">{{ todo.content }}</li>
                            <input type="hidden" id="todoNum" name="todoNum" value="{{ todo.id }}"></input>
                            <span class="input-group-addon">
                                <button type="submit" class="custom-btn btn btn-danger">완료</button>
                            </span>
                        </div>
                    </form>
                    {% endfor %}
                </ul>
            </div>

 

다음으로 데이터를 삭제하는 기능을 추가하기 위해 index.html 파일을 아래와 같이 수정합니다.

<form action="./deleteTodo" method="GET">

 

./deleteToDo를 작성하였기 때문에, ToDoList/my_to_do_app/urls.py 파일도 수정합니다.

from django.urls import path 
from . import views 

urlpatterns = [
    path('', views.index, name="index"), 
    path('createTodo/', views.createTodo, name="createTodo"), 
    path('deleteTodo/', views.deleteTodo, name="deleteTodo"), 
]

 

다음으로, views.py 파일로 이동하여 delete 기능 추가를 위해 deleteTodo 함수를 생성합니다.

from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse
from .models import *

# my_to_do_app/views.py
# Create your views here.
# def index(request):
#    return HttpResponse("my_to_do_app first page")
def index(request):
    # DB에서 데이터를 받아서 index.html 뿌려주기
    todos = Todo.objects.all()
    content = {
        "todos" : todos
    }
    return render(request, "my_to_do_app/index.html", content)

def createTodo(request):
    user_input_str = request.POST['todoContent']
    new_todo = Todo(content = user_input_str)

    # 데이터 DB에 저장
    new_todo.save() 
    # return HttpResponse("create ToDo를 하자" + user_input_str)
    return HttpResponseRedirect(reverse('index'))

def deleteTodo(request):
    delete_todo_id = request.GET['todoNum']
    print("삭제할 todo의 id:", delete_todo_id)
    todo = Todo.objects.get(id = delete_todo_id)

    # 데이터 삭제
    todo.delete()

    return HttpResponseRedirect(reverse('index'))

 

runserver를 다시 실행하여 확인하면, 정상적으로 추가 및 삭제 기능이 작동하는 것을 확인할 수 있습니다.