Django(장고) Todo 특정 게시물 삭제 DELETE

장현웅·2023년 9월 5일
0

특정 게시물 삭제도 todo 모델 데이터의 id값을 알아야 해당 데이터를 데이터베이스에서 통째로 삭제할 수 있다.

[todo/views.py/delete함수]

@csrf_exempt
def delete(request, todo_id):
    if request.method == 'POST':		# 데이터 생성,수정,삭제는 POST 읽기만 GET
        detailed_todo = Todo.objects.get(id=todo_id)
        detailed_todo.delete()
        return redirect("/todo/")
    else:
        return HttpResponse("Invalid request method", status=405)

[todo/urls.py/]

from django.contrib import admin
from django.urls import path
from . import views


urlpatterns = [
    path('todo/', views.todo),
    path('todo_create/', views.create),
    path('todo/<int:todo_id>/', views.read),
    path('todo/delete/<int:todo_id>/', views.delete),
]

ThunderClient로 1번 게시물을 지워보겠다.


잘 삭제되는 것을 볼 수 있다.

이번에는 삭제버튼을 만들어서 페이지에서 직접 삭제가 가능하도록 해보겠다.

todo 추가하기 버튼도 만들어보자.

[templates/todo/detail.html]

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Todo!!</title>
</head>
<body>
  <h1>{{detailed_todo.id}}번째 Todo!!</h1>
  <h3>[  {{detailed_todo.content}}  ]</h3>
  <p>생성시각 : {{detailed_todo.created_at}}</p>
  <p>수정시각 : {{detailed_todo.updated_at}}</p>
  <form action="/todo/delete/{{todo_id}}/" method="POST">
  	{% csrf_token %}
    <button> 삭제하기 </button>
  </form>
  <a href="/todo/">
    <button>Todo List로 돌아가기<button>
  </a>
</body>
</html>

[templates/todo/todo_list.html]

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>알렉스의 ToDo List</title>
</head>
<body>
  <h1> Alex's ToDo List </h1>
    <a href="/todo_create/">
      <button>todo 추가하기</button>
    </a>
    <ul>
      {% for todo in todos %}
      <a href="/todo/{{ todo.id }}/">
        <li>
          <div>
            {{ todo.content }}
          </div>
        </li>
      </a>
      {% endfor %}
    </ul>
</body>
</html>

데이터 삭제는 POST!! HTML 폼을 서버에 보내서 데이터베이스의 변화를 주기 때문에 <form></form> 태그에 input 요소를 담는다.

삭제버튼으로 다 지웠다.

데이터베이스에도 데이터가 지워진 것을 볼 수 있다.

추가하기 버튼을 누르면 '/todo/'로 이동하도록 해보자.

[todo/views.py/create 함수 Before]

@csrf_exempt
def create(request): 
    if request.method == "POST":
        Todo.objects.create(content=request.POST["content"])
        return HttpResponse('todo 생성!')
    elif request.method == "GET":
        return render(request, 'todo/create.html')
    else:
        return HttpResponse("Invalid request method", status=405)

[todo/views.py/create 함수 After]

@csrf_exempt
def create(request): 
    if request.method == "POST":
        Todo.objects.create(content=request.POST["content"])
        return redirect('/todo/')
    elif request.method == "GET":
        return render(request, 'todo/create.html')
    else:
        return HttpResponse("Invalid request method", status=405)

0개의 댓글