2월 17, 2024

[Django] diary 만들어보기 (6) CRUD 구현- Delete

https://www.programmingstory.com/2024/02/django-diary-5-crud-update.html

이전 포스팅에서는 CRUD 중 Update하는 법에 대해서 알아보았다. 오늘은 CRUD 중 마지막 delete 하는 법에 대해 알아보도록 하겠다. 

delete를 위해서는 먼저 urls.py에서 delete 부분을 추가해준다.


from django.urls import path
from diary import views

app_name='diary'
urlpatterns = [
    path('', views.index, name='index'),
    path('create/', views.create, name='create'), 
    path('<int:id>/', views.show, name='show'),
    path('<int:id>/edit', views.edit, name='edit'), 
    path('<int:id>/update/', views.update, name='update'), 
    path('<int:id>/delete/', views.delete, name='delete'), # add this line
]

하지만 아직 views.delete가 없으므로 views.py에 delete 함수를 만들어준다.


delete함수는 비교적 간단하다.

def delete(request, id):
    post = Post.objects.get(id=id)
    post.delete() 
    return redirect('diary:index')

post 객체에 대해서 delete()를 호출해주고 다시 index url로 돌아가면 되기 때문이다. 


따라서 별도의 html 파일도 필요하지 않다! 개인적으로 CRUD 중에 가장 간단하지 않나 싶다.


다만 여기서 삭제할 수 있는 버튼을 만들어주어야 하기 때문에 show.html에 삭제 버튼을 넣어준다. 

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>My diary</title>
  </head>
  <body>
    <div>
      <a href="{% url 'diary:index' %}">return</a>
      <h1>Title: {{ post.title }}</h1>
      <h3>Satisfaction: {{ post.satisfaction }}</h3>
      <p>Content: {{ post.content }}</p>
      <a href="{% url 'diary:edit' id=post.id %}">Edit</a>
      <a href="{% url 'diary:delete' id=post.id %}">Delete</a> 
    </div>
  </body>
</html>

앞의 첫 목록에서도 삭제하고 싶다면 index.html 파일에다 링크를 걸어주면 된다.


<!-- index.html -->

<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8'>
    <title>My diary</title>
  </head>
  <body>
    <h1>My Diary page<br>
    <a href="/post/create">add</a></h1><br/>
    
    {%for post in posts%}
    <div style="border: 2px solid green;">
      <a href="/post/{{post.id}}">
        <h3> {{post.title}}   </h3>
        <a href="{% url 'diary:delete' id=post.id %}">   Delete</a>
      </a>
      <h3> satisfied: {{post.satisfaction}} </h3>
      <h3> {{post.content}} </h3>
    </div>
    {% endfor %}
  </body>
</html>

이렇게 구현하면 첫 페이지에서도 delete 버튼이 있고 이를 클릭하면 바로 일기가 삭제가 된다. 

 

이 포스팅을 끝으로 일기 만들기를 완료해보았고 CRUD 모든 기능을 구현했다. 다른 CRU가 궁금한 분들은 이전 포스팅을 통해 확인하면 될 것 같다.