티스토리 뷰

반응형

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를 통해 판단한다

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함