コメントの編集・更新機能と同様に,削除についても投稿者自身でしが削除できないようにしよう.
comments/views.py
def comments_delete(request, comment_id):
if not request.user.is_authenticated:
return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
# return render(request, 'comments/delete_confirm.html')
if request.method == 'POST':
comment = get_object_or_404(Comment, pk=comment_id)
if comment.is_owner(request.user) == False:
messages.success(request, '他ユーザのコメントは削除できません')
return redirect(reverse('comments:index'))
comment.delete()
messages.success(request, 'コメントを削除しました')
return redirect(reverse('comments:index'))
else:
context = {}
comment = get_object_or_404(Comment, pk=comment_id)
if comment.is_owner(request.user) == False:
messages.success(request, '他ユーザのコメントは削除できません')
return redirect(reverse('comments:index'))
context['id'] = comment_id
context['title'] = comment.title
context['body'] = comment.body
context['page_title'] = 'コメントの削除'
context['form_name'] = 'コメントを削除しますか'
context['button_label'] = 'コメントを削除する'
return render(request, 'comments/delete_confirm.html', context)
削除の確認画面も設計します.
comments/templates/comments/delete_confirm.html
{% extends "base.html" %}
{% block title %}
{{ page_title }}
{% endblock %}
{% block content %}
<h1 class="my-5">{{ form_name }}</h1>
<div class="card mb-3">
<div class="card-header">
ID : {{ id }}
</div>
<div class="card-body">
<p class="card-text">Title : </p>
<h5 class="card-title">{{ title }}</h5>
<p class="card-text">Body : </p>
<p class="card-text">{{ body }}</p>
</div>
</div>
<form method="POST">
{% csrf_token %}
<button type="submit" class="btn btn-primary">{{ button_label }}</button>
</form>
<ul>
<li>
<a href="{% url 'comments:index' %}">コメント一覧</a>
</li>
<li>
<a href="{% url 'comments:show' 10 %}">コメント詳細</a>
</li>
<li>
<a href="{% url 'comments:create' %}">コメント投稿</a>
</li>
<li>
<a href="{% url 'comments:update' 10 %}">コメント更新</a>
</li>
<li>
<a href="{% url 'comments:delete' 10 %}">コメント削除</a>
</li>
<li>
<a href="/">トップページへ</a>
</li>
</ul>
{% endblock content %}
Web サーバを起動してコメントを削除してみます.
(py39) C:\Users\lecture\Documents\django\django_comment_auth>python manage.py runserver ⏎
Watching for file changes with StatReloader
Performing system checks...
ここまでで主要な機能が概ね完成しました.次のページでは以前に設置した Navbar を調整しよう.