在 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 标准。正如HTTP 规范 [w3.org] 的安全方法标准所说:
特别是,已经建立了约定,即 GET 和 HEAD 方法不应具有采取除检索之外的操作的意义。这些方法应该被认为是“安全的”。
因此,您不能让 GET 请求删除项目:像 Google 机器人这样的抓取工具可能会意外触发此视图,从而删除数据。
如果要删除项目,通常通过 DELETE 请求或 POST 请求来执行此操作。这也是[Django-doc]的实现方式:它将删除 DELETE 或 POST 请求的对象。这个想法是,对于 GET 请求,您可以呈现一个模板,例如,询问您是否确定要删除该项目,然后在用户确认时发出 POST(或 DELETE)请求。DeleteView
通常,视图还会检查用户是否被授权这样做:例如,如果仅允许对象的“所有者”删除此类项目,则视图应对此进行验证。
我在课程中看到人们使用这两种方法。
第一个不是一个好主意,并且违反了 HTTP 标准。任何使用它的课程都会带来安全风险。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句