티스토리 뷰
0.들어가면서
게시물을 봤을 때, accounts/user_id/delete 해야할 것 같다. id가 3이라면 /accounts/3/delete/하면 id가 3인 사람이 지워질거다. 그러나 회원정보는 세션 정보로 판단이 가능하기 때문에 그냥 'delete/'해도 된다.
urls.py
path('delete/', views.delete, name='delete'),
views.py
from django.contrib.auth.decorators import login_required
from django.views.decorators.http import require_POST
@require_POST
@login_required
def delete(request):
request.user.delete()
return redirect('articles:index')
로그인한 정보는 request 안에 담겨 있기 때문에 url로 굳이 할 필요가 없다. request.user는 로그인한 유저의 정보라는 뜻이고 .delete()는 그 정보를 삭제하겠다는 의미이다.
/accounts/detail.html
{% block body %}
<h1>{{ user.pk }} : {{ user.username }}</h1>
{% if request.user == user %}
<form action="{% url 'accounts:delete' %}" method="POST">
{% csrf_token %}
<button class="btn btn-secondary">회원 탈퇴</button>
</form>
{% endif %}
<hr>
{% endblock %}
회원 탈퇴가 가능한 form을 적어준다. 만약 이때, a 태그를 쓰지 않고 form 태그를 쓰는 이유는 url로 지워지는 것을 막기 위해서 이다. 따라서 POST 요청으로만 처리하고 싶으면 form을 쓰면 된다. 그리고 views에서는 require_POST를 쓰면 되고 로그인은 @login_required를 추가하면된다.
{% if request.user == user %}
로그인한 자신의 detail.html에서만 가능하게 설정한 것이다.
게시글 삭제와 id삭제를 비교
@require_POST
@login_required
def delete(request, pk):
article = get_object_or_404(Article, pk=pk)
article.delete()
return redirect('articles:index')
id 삭제는 request.user로 불어왔다면 게세글에서는 article이 어떠한 글인지를 url에서 넘어온 pk를 통해 판단한다
'Web > Django' 카테고리의 다른 글
[Django]데이터베이스관리(1:N)_댓글 기능 추가하기 (0) | 2020.08.24 |
---|---|
[Django]데이터베이스관리(1:N)_User와 Article (1) | 2020.08.23 |
[Django]base.html_최종 (31) | 2020.08.14 |
[Django]사용자인증관리_logout (0) | 2020.08.13 |
[Django]사용자인증관리_login, 쿠키와 세션, 캐쉬 (31) | 2020.08.13 |
- Total
- Today
- Yesterday
- react
- UserCreationForm
- django
- nextjs autoFocus
- 자료구조
- Python
- Express
- react autoFocus
- error:0308010C:digital envelope routines::unsupported
- Deque
- JavaScript
- DFS
- next.config.js
- login
- Vue
- pandas
- 클라우데라
- read_csv
- NextJS
- mongoDB
- useHistory 안됨
- 자연어처리
- logout
- nodejs
- TensorFlow
- Queue
- vuejs
- typescript
- BFS
- useState
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |