3

我正在使用 Django,我希望我的用户确认他们确实想要删除某些内容。我正在考虑纯 Django 解决方案(没有 Javascript 确认)。根据我的想法,我可以创建一个包含“是”和“否”按钮的新页面。如果用户按“是”,我的网站将继续并从数据库中删除该对象。在不使用 Javascript 的情况下进行删除是正确的方法吗?如果你是我,你会如何实现这个功能?

4

2 回答 2

5

我会使用 Django 的内置DeleteView,它将显示一个 HTTP 请求的确认页面并为一个 HTTPGET请求执行删除POST

文档给出了这个例子:

from django.views.generic.edit import DeleteView
from django.core.urlresolvers import reverse_lazy
from myapp.models import Author

class AuthorDelete(DeleteView):
    model = Author
    success_url = reverse_lazy('author-list')

我建议阅读文档,SingleObjectMixin其中解释了如何自定义视图查找要删除的对象的方式(默认是查找名为 的 URL 关键字参数pk),以及TemplateResponseMixin解释如何自定义使用的模板的文档(默认为'myapp/author_check_delete.html')。

这只是许多基于类的通用视图之一,它们使基本操作(显示单个模型实例的页面、模型实例列表以及处理编辑、删除等)非常快速且易于实现。

如果您以后想用 JavaScript 增强这一点,您总是可以编写一些不显眼的 JS 来检测到删除确认页面的链接(通过查找类或特定 URL)并添加一个单击处理程序,该处理程序会弹出一个确认对话框,然后发送对链接属性中的 URL的POST请求。href您还需要稍微修改视图以在request.is_ajax()is时返回 JSON 对象True,以便您的 JS 知道删除是成功还是失败,这可能涉及覆盖从DeletionMixin.

于 2012-09-07T07:24:37.297 回答
4

听起来不错。我做过几次是创建一个可以在应用程序的任何地方使用的确认模板:

{% extends 'base.html' %}

{% block content %}

    <div class="confirmation-box">
        <p>{{ message }}</p>
        <div>
            <a href="{{ prev_link }}">Cancel</a>
            <form action="{{ action_link }}" method="post">
                <input type="hidden" name="next" value="{{ prev_link }}" />
                <input type="submit" value="Send" />
            </form>
        </div>
    </div>

{% endblock %}

你传递给它:

  • 给用户的确认消息 ( message)
  • 您所在页面的 url ( prev_link)
  • 应调用以执行操作的 url ( action_link)

如果用户取消该操作,那么她/他将返回到原始页面。

如果用户确认,则prev_link作为隐藏参数传递,因此视图可以在执行操作后将用户重定向到原始页面(尽管这当然是完全可选的)。

这几乎就是您在问题中提出的。

于 2012-09-07T07:32:17.523 回答