티스토리 뷰

Web/Django

[Django] CRUD_DELETE

HAN_PY 2020. 7. 16. 22:10
반응형

detail.html

<a href="/articles/{{ article.pk }}/delete/">삭제</a>

 

urls.py

path("<int:pk>/delete/", views.delete)

 

views.py

def delete(request, pk):

    article = Article.objects.get(pk=pk)

    article.delete()                                       : 실제 쿼리메세지

    return redirect('/articles/')

 

 

 


삭제 부분에 살을 붙여서 적용해보자.

  • a태그 부분을 위에서는 GET으로 했다. 그러나 delete는 DB를 삭제하는것이니 POST하자. 이때 POST는 a태그로는 불가능 하고 form으로만 가능하다. 따라서 form으로 변경
  • 문제발생)POST로 보내기만 하면 url을 통해서 GET요청으로 /3/delete/를 하면 3번글이 지워진다. GET일 때는 안지워지게 해야한다. 
    • view.py에서 if request.method=='POST: 로 분기를 해도 되지만 우리는 decorator를 사용한다.
    • from django.views.decorators.http import require_POST
    • @require_POST
    • 위의 2줄로 POST만 접근 가능하게 가능하다.

암기법)

from django.views.decorators.http import require_POST

장고에서 에서 활용 할 데코레이터 중에 http프로토콜 관련 된것들 중에 require_POST를 가져오겠다.

 

 

detail.html

<form action="{% url 'articles:delete' article.pk %}" method='POST'>

    {% csrf_token %}

    <input type="submit" value="삭제">

</form>

 

 

urls.py

path('<int:pk>/delete/', views.delete, name='delete')

 

 

views.py

from django.views.decorators.http import request_POST

@require_POST

def delete(request, pk):

    article = get_object_or_404(Article, pk=pk)

    article.delete()

    return redirect('articles:index')

반응형

'Web > Django' 카테고리의 다른 글

[Django]forms.html (create.html+update.html)  (0) 2020.07.22
[Django] API  (108) 2020.07.20
[Django] CRUD_UPDATE  (0) 2020.07.14
[Django] CRUD_READ_목록페이지 구현  (0) 2020.07.12
[Django] CRUD_CREATE  (0) 2020.07.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함