2 回答
TA贡献1831条经验 获得超4个赞
您永远不应该根据 GET 请求删除任何内容。所以不要做一个简单的<a>标签按钮来导致你的笔记被删除。您需要将删除操作放在通过 POST 请求提交的表单中。
将您的模板更改为:
<form method="post" action="{% url 'delete_note' note.pk %}">
{% csrf_token %}
<input type="submit" class="btn btn-danger" name="delete">DELETE</input>
</form>
此外,您应该给每个模式一个不同的 id,现在当您单击垃圾桶图标时,目标是“#myModal”,但这始终是第一个,因为 id 必须是唯一的。将 forloop 计数器或 pk 添加到 id。
您的观点是:
def delete_note(request, pk):
if request.method == 'POST' and request.POST.get('delete'):
note = get_object_or_404(Notes, pk=pk)
note.delete()
return redirect('notes')
else:
return HttpResponseNotAllowed(['DELETE'])
另请注意,更好地遵循 REST 指南的更好的 url 将是:
path('notes/<int:pk>/delete', delete_note, name="delete_note")
因为“/notes/”是笔记列表,“/notes/id”是特定笔记,“/notes/id/delete”是对特定笔记的删除操作(在真正的 REST API 中,您不需要/delete 但只会DELETE向“/notes/id”发送 HTTP 请求,但这不能在仅支持的浏览器中完成POST)。
添加回答
举报