데이터 분석 기술 블로그

DB에 대하여(7)_Article & User 게시글 READ & UPDATE & DELETE (feat. Django) 본문

DB

DB에 대하여(7)_Article & User 게시글 READ & UPDATE & DELETE (feat. Django)

데이터분석가 이채은 2024. 4. 24. 09:00

1. 게시글 READ

각 게시글의 작성자 이름을 출력한다.

<!-- articles/index.html -->

{% for article in articles %}
  <p>작성자 : {{ article.user }}</p>
  <p>글 번호 : {{ article.pk }}</p>
  <a href="{% url 'articles:detail' article.pk %}">
    <p>글 제목 : {{article.title }}</p>
  </a>
  <p>글 내용: {{ article.content }}</p>
  <hr>
{% endfor %}


2. 게시글 UPDATE

게시글 수정 요청 사용자와 게시글 작성 사용자를 비교하여 보인의 게시글만 수정할 수 있도록 합니다.

# articles/views.py

@login_required
def update(request, pk):
    article = Article.objects.get(pk=pk)
    if request.user == article.user:
        if request.method == 'POST':
            form = ArticleForm(request.POST, instance=article)
            if form.is_valid():
                form.save()
                return redirect('articles:detail', article.pk)
            else:
                form = ArticleForm(instance=article)
        else:
            return redirect('articles:index')

해당 게시글의 작성자가 아니라면, 수정/삭제 버튼을 출력하지 않도록 합니다.

<!-- articles/detail.html -->

{% if request.user == article.user %}
  <a href="{% url 'articles:update' article.pk %}">UPDATE</a><br>
  <form action="{% url 'articles:delete' article.pk %}" method="POST">
    {% csrf_token %}
    <input tpye="submit" value="DELETE">
  </form>
{% endif %}

3. 게시글 DELETE

삭제를 요청하려는 사람과 게시글을 작성한 사람을 비교하여 본인의 게시글만 삭제 할 수 있도록 합니다.

# articles/views.py

@login_required
def delete(request, pk):
    article = Article.objects.get(pk=pk)
    if request.user == article.user:
        article.delete()
    return redirect('articles:index')