【问题标题】:django jquery POST development server showing 500 statusdjango jquery POST 开发服务器显示 500 状态
【发布时间】:2014-01-27 13:23:03
【问题描述】:

我正在尝试根据sigurdga / django-jquery-file-upload 将多个 CSV 文件上传到 django

作为 javascript 和 jquery 的新手,我正努力使示例代码的更改尽可能小。

我成功地将其更改为上传普通文件而不是图像文件,并让它上传批量 CSV。

现在我有一个简单但基本的调试问题。

我介绍的一些东西导致 Django 开发服务器在 POST 期间失败并返回 500 状态 - 我可以在服务器的控制台输出中看到这一点。

[27/Jan/2014 12:29:31] "POST /banking/new/acount1234/ HTTP/1.1" 500 15103

我在各种 django 函数中调试打印语句,包括相关的view.form_validview.form_invalidmodel.save

我还添加了一个自定义的handler500,看看我是否可以在那里捕捉到一些东西。

我的问题是服务器抛出 500,但我不知道在哪里进行调试。

所以我的问题是 - 在 Django 中是否有某个地方可以拦截 URL 处理以查看它为什么会抛出 500

文档说 DEBUG=True 不应该发生 - 但我知道它确实会发生,因为如果我的 PgSQL 服务器停止它会在 GET's 上抛出 500

我看不到 django 调试页面,因为 js 页面没有给我任何状态,而且我还不够熟悉,无法自定义它。

我原以为控制流会出现在我的 form_invalid 中,但事实并非如此。

我应该根据我使用通用 CBV CreateView 的示例添加这一点,所以也许这正在生成 500,也许我应该为此编写源代码并基于它创建我自己的视图代码然后我可以使用print's

更新

由于我使用的是通用的CBVs,所以有很多隐藏在幕后的东西。

我发现调试它的唯一方法是实际将 CreateView 的 django 源代码和各种超类临时复制到我自己的源文件中,并将 pdb 断点放入。

总之,我假设我可以使用现成的包上传文件并通过覆盖视图中的form_validModel 中的save 来为我的模型添加其他字段。

但是CreateView 在我访问它之前检查对象数据是否有效,因此它对blank=Falsenull-False 的任何字段抛出异常。

我更改了我的模型以允许 NullBlank 除了文件之外的所有文件,它允许它通过,以便我可以将它们填充到 form_valid

随后,由于我的 CSV 处理中出现异常,上传文件中包含非 ascii 字符,它又抛出了另一个 500

必须有一种更简单的方法来调试客户端脚本和 JSON 隐藏简单服务器页面响应的东西

【问题讨论】:

  • 您可以使用浏览器的开发者工具查看完整的 Django 错误页面。
  • 我该怎么做(Chrome)?
  • 正如我所说,使用 Chrome 开发人员工具。在网络上有很多使用它们的指南。

标签: jquery ajax django debugging


【解决方案1】:

如果您有DEBUG = True,那么您应该能够看到堆栈跟踪以及您想要的所有信息。但是因为您正在执行 AJAX 请求,您可以通过打开开发人员工具(或 firebug)、转到网络选项卡并在那里查看响应来查看结果。如果您使用的是 Chrome,您应该能够在此处预览页面并查看错误。

除此之外,您可以简单地使用ipdb 并在代码中的任何位置添加断点,通常是在您的视图方法中。使用 pip 安装并添加这一行:

python import ipdb; ipdb.set_trace()

【讨论】:

  • 我希望有一个堆栈跟踪,但什么都没有 - 只是我发布的控制台日志条目。所以我不知道从哪里开始调试。我假设 500 报告来自 runserver,但如果我不知道异常在哪里并且我没有堆栈跟踪,我应该在哪里设置断点?
  • 我认为它没有达到我的观点或表单代码的程度。在服务器处理 POST 的过程中,我可以在哪里更早进入,以便查看哪里出错了?
  • 好的,您可以从 runserver 控制台看到 500,但您也应该在浏览器上看到堆栈跟踪。那将有更多的信息。可能是你有一个数据库错误,甚至在你点击视图之前 django 正在抛出异常,但即使在这种情况下,DEBUG = True 时也应该有一些日志
  • 我的网页是现成的JQuery,它很复杂,-我正在使用django-jquery-file-upload,它不显示开发服务器堆栈跟踪。我真的不明白为什么服务器返回500 - 我认为DEBUG=True 时被禁止了
猜你喜欢
  • 2011-08-21
  • 2014-05-30
  • 2018-06-09
  • 2019-12-10
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多