Удаление объекта в Django

Какая лучшая практика удаления объекта в Django? Используя простой "a tag" со ссылкой на представление, как это:

def deleteStudent(request,id):
    student = get_object_or_404(Student, id = id)
    student.delete()
    return redirect('/')

или используя метод post:

<form method="POST">
    {% csrf_token %}
    Are you want to delete this item ?
    <input type="submit" value="Yes" />
    <a href="/">Cancel </a>
</form>

и в представлениях:

def deleteStudent(request, id):
    student = get_object_or_404(Student, id = id)

    if request.method =="POST":
        student.delete()
        return redirect('/')
 
    return render(request, "delete_view.html")

Я видел в курсах, что люди используют оба метода (это пример кода, я не тестировал его и не защищал представления). Так вот, если мы можем удалять объекты методом "POST", могу ли я сказать на собеседовании, что "метод POST также может быть использован для удаления объектов"? Спасибо за все ответы.

Первый нарушает стандарт HTTP. Как сказано в стандарте safe methods спецификации HTTP [w3.org]:

В частности, было установлено, что методы GET и HEAD НЕ ДОЛЖНЫ иметь значение для выполнения какого-либо действия, кроме извлечения. Эти методы должны считаться "безопасными".

Таким образом, вы не можете позволить GET-запросу удалить элемент: скреперы, такие как бот Google, могут случайно вызвать это представление и таким образом удалить данные.

If you want to remove items, usually you do this by a DELETE request, or a POST request. This is also how the DeleteView [Django-doc] is implemented: it will remove the object for a DELETE or POST request. The idea is that for a GET request, you can render a template for example that asks if you are sure you want to remove that item, and thus then make a POST (or DELETE) request when the user confirms.

Часто представление также проверяет, уполномочен ли пользователь делать это: например, если только "владелец" объекта может удалить такой элемент, то представление должно подтвердить это.

Я видел на курсах, что люди используют оба метода.

Первый вариант является не хорошей идеей и нарушает стандарты HTTP. Любой курс, использующий это, вводит риски безопасности.

Вернуться на верх