Django & Ajax - 没有返回语句的视图

Posted

技术标签:

【中文标题】Django & Ajax - 没有返回语句的视图【英文标题】:Django & Ajax - view without return statement 【发布时间】:2012-05-10 16:21:37 【问题描述】:

在我的 Django 应用程序中,我有一个项目列表,每个项目旁边都有一个“删除”选项。我希望用户能够单击“删除”按钮,让它发送一个 $.post 到 Django 视图,在那里它将删除该实例。成功删除此实例后,我将在 javascript 中触发另一个 Ajax 请求以重绘列表而不删除已删除的实例。

我的问题:如果我实际上没有向 $.post 返回值,那么我应该使用 ajax 来执行此操作吗? Ajax 是专门用于检索信息的吗?即使我实际上没有返回任何东西,是否需要 Django 视图来返回 HttpResponse?

处理“删除”请求和视图之类的正确方法是什么?

谢谢。

【问题讨论】:

【参考方案1】:

Django 视图总是必须返回一个 HttpResponse 对象,或者其中一个是 subclasses。只需尝试返回其他内容,看看 Django 是如何反应的(它应该会导致 500 错误)。

对于您描述的情况,您可以使用 jQuery 中的 $.post 方法。如果你这样做了,你肯定应该返回一个字符串来指示成功删除或错误。如果您不考虑错误,您最终可能会从用户正在查看的页面中删除某些内容,而不会实际删除服务器上的项目,这可能会给您的用户造成不一致和混乱。

然后,您的 UI 应该具有正在删除的对象的特定状态 - 即用户已按下删除但服务器尚未响应*。然后如果有错误(你要么在success函数中收到一个指示错误的字符串,要么调用error函数,见jQuery docs about $.post)你可以报告它给用户并将项目返回到它的正常状态。如果删除成功,您可以继续从页面中删除该项目(或在它被删除时执行您打算执行的任何操作)。

*(项目被删除的一个很好的指标可能是降低它的不透明度(让它有点透明)并添加一个小旋转轮或另一个“正在进行”删除的指标。)

【讨论】:

以上是关于Django & Ajax - 没有返回语句的视图的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 帖子从 Django 返回 CSRF 错误

如何在 django ajax 更新中返回 json 字典

有没有办法通过 ajax 提高正常的 Django 表单验证?

从 django views.py 获取数据并使用 ajax 显示它

django & ajax 依赖的 html 选择列表(级联下拉列表)

Ajax jQuery serialize() & serializeArray() textarea 未以 Django 形式提交