본문 바로가기
Python/Django

Django 작성된 글 읽기/삭제 기능 구현

by K-밍키 2022. 5. 31.

작성된 글을 읽어오고 삭제해보자.


1. 작성된 글을 읽어오기 (이전에 작성된 내용 이어서 작성)

 1-1. view.py

# tweet/views.py 

# 변경사항

user = request.user.is_authenticated  # 사용자가 로그인이 되어 있는지 확인하기
if user:  # 로그인 한 사용자라면
	return render(request, 'tweet/home.html')
==>
 user = request.user.is_authenticated  # 사용자가 로그인이 되어 있는지 확인하기
if user:  # 로그인 한 사용자라면
    
    # Tweet 모델에서 모든 글을 역순으로 정렬하여 all_tweet에 저장
    all_tweet = TweetModel.objects.all().order_by('-created_at')
    
    # tweet/home.html을 화면에 띄우면서 {'tweet':all_tweet} 라는 데이터를 화면에 전달
	return render(request, 'tweet/home.html', {'tweet': all_tweet})

 1-2. home.html

<!-- 템플릿 언어로 tweet라는 리스트로 전달받아서 반복문으로 출력 -->
{% for tw in tweet %}
<div class="media">
    <div class="media-body">
    
        <h5 class="mt-0">{{ tw.content }}</h5>  <!-- 해당 글의 내용 -->
    </div>
    <div style="text-align: right">
    
        <!-- 해당 글의 작성자의 이름 - 해당 글의 작성시간 | 의 이전 -->
        <span style="font-size: small">{{ tw.author.username }}-{{ tw.created_at|timesince }} 전</span>
    </div>
</div>  
{% endfor %}

 

2. 작성된 글 삭제하기 : 게시물의 고유한 id값을 기준으로 삭제(/tweet/delete/게시글의id)

 2-1. view.py

# tweet/views.py
from django.contrib.auth.decorators import login_required

@login_required  # 사용자 로그인 중
def delete_tweet(request, id):  # 인자로 id 값을 가져온다
    my_tweet = TweetModel.objects.get(id=id)  # Tweet 모델에서 id값의 글을 가져온다
    my_tweet.delete()  # 해당 글 삭제
    return redirect('/tweet')

 2-2. tweet/urls.py : 글 삭제의 경우 delete/게시글의id 으로 보내기 위해 path를 추가

# tweet/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),
    path('tweet/', views.tweet, name='tweet'),
    
    # int:id 로 id값을 숫자로 받아온 url을 생성
    path('tweet/delete/<int:id>', views.delete_tweet, name='delete-tweet'),
]

 2-3. home.html

<!-- templates/tweet/home.html -->

{% if tw.author == user %}  <!-- 해당 글의 작성자가 로그인한 사용자일 경우 삭제div 노출 -->
<div style="text-align: right">
    <a href="/tweet/delete/{{ tw.id }}">  <!-- 해당 글의 id값을 가진 url : 이 url로 접속시 글 삭제-->
        <span class="badge rounded-pill bg-danger">삭제</span>
    </a>
</div>
{% endif %}

 

3. 결과화면

글쓰기, 읽어오기, 삭제 기능 구현