防止在django

时间:2017-07-08 03:22:42

标签: django

我内部有一个链接和按钮,用于删除与按钮相关联的记录

<a href="{% url 'parts:stock_delete' stock.id  %}">
  <button class="delete" type="submit" name="delete_btn" style="position: absolute; right: 40px;" >Delete</button>
</a>

但是我希望仅在按下按钮时删除记录,而不是在地址栏中输入URL时删除记录,如:

  

http://127.0.0.1:8000/parts/stock_delete/16/

可以为此做些什么?

3 个答案:

答案 0 :(得分:1)

您可以使用post方法。当按下按钮时,您可以传递一些标记,例如flag1

<form action="{% url 'parts:stock_delete' stock.id  %}" method="post" >
    <input type="hidden" name="flag1" value="True" >{% csrf_token %}
    <button class="delete" type="submit" name="delete_btn" style="position: absolute; right: 40px;" >Delete</button></a>
</form> 

在后端你可以在views.py中的函数中这样写。

# delete view
....
if request.method == 'POST':
    if 'flag1' in request.POST:
        ... # deleted your object here

答案 1 :(得分:1)

你应该真的使用DeleteView

这是一个基于类的通用视图 - 当查看(GET)时,将显示一个确认页面,询问您是否确实要删除该记录。确认后(POST),记录将被删除。

@ sasuke的答案没有考虑另一个大的安全漏洞CSRF。如果您想确保您的应用程序是安全的,您将非常密切地学习此页面。

答案 2 :(得分:1)

你可以像Kye所说的那样,通过post使用DeleteView来排除注册表。 CSRF存在一个问题,但Django已经为AJAX请求提供了一种带来令牌的方法。您可以查看文档:{​​{3}}