티스토리 뷰
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
- pandas
- error:0308010C:digital envelope routines::unsupported
- mongoDB
- login
- TensorFlow
- UserCreationForm
- react
- Python
- typescript
- 자료구조
- 클라우데라
- next.config.js
- django
- NextJS
- Express
- 자연어처리
- Deque
- useState
- Vue
- vuejs
- react autoFocus
- Queue
- nextjs autoFocus
- JavaScript
- read_csv
- DFS
- BFS
- nodejs
- logout
- useHistory 안됨
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |