在屏蔽/隐藏底层URL时执行敏感的Django操作

时间:2012-04-17 17:31:24

标签: python django

我有一个简单的Django视图,确认删除实例。在此页面上有一个简单的表单,其中包含两个按钮,“取消”和“删除”。

取消按钮只是将用户返回到按下原始删除按钮的页面。

删除按钮跳转到执行实际操作的第二个视图。因此,我的URL定义如下:

url(r'^confirmDeleteItem/(?P<item_key>\w+)$', 'confirm_delete_item'), # Confirms

url(r'^deleteItem/(?P<item_key>\w+)$', 'delete_item'), # Performs the action

在确认页面上,表单定义为访问第二个URL的POST操作:

<form action="/squash/deleteItem/{{ item.key }}/" method="POST">
...
</form>

我遇到的问题是项目相当大(它们存储大量数据)和敏感,所以我想强迫用户每次都跳过确认箍。

我想要阻止用户手动访问/deleteItem/页面,或者只是隐藏浏览器对此页面的加载,以避免它被存储在历史记录中,意外添加书签等。< /强>

将动作包装在AJAX调用中是解决此问题的最佳方法,还是有更多标准/首选解决方案?谢谢!

2 个答案:

答案 0 :(得分:3)

如何在confirmDeleteItem视图中设置会话变量(即prepareToDelete = item.key)并检查deleteItem视图是否存在此会话变量以及该值是否与item.key匹配?然后你只需要在实际删除后删除它。

答案 1 :(得分:1)

一个我不确定的快速想法,但应该适合你的情况。

deleteItem视图中检查您的引用者。就像this snippet of code一样。如果用户未从confirmDelete视图进入删除视图,请将其重定向到相应的confirmDelete视图。