【问题标题】:Django - How to get debug info of DatabaseError "current transaction is aborted" in Django error page?Django - 如何在 Django 错误页面中获取 DatabaseError“当前事务中止”的调试信息?
【发布时间】:2013-02-17 18:34:44
【问题描述】:

在开发我的 Django 项目时,我收到一个 DatabaseError,上面写着:

当前事务被中止,命令被忽略直到结束 交易区块

我知道发生这种情况是因为有一个没有回滚的错误 PostgreSQL 事务,并且这个错误事务中的错误可以在 PostgreSQL 错误日志中找到。但是,我认为如果在 Django 错误页面上显示此错误会更方便。然后就可以直接看到问题所在了。

那么,是否有可能在 Django 错误页面上获取这些 PostgreSQL 错误?如果有,怎么做?

【问题讨论】:

  • 你看过 django 调试工具栏了吗? - github.com/robhudson/django-debug-toolbar/commits/master
  • 你做过研究吗?你有什么尝试吗?你检查过 Django 文档吗?展示你的努力。
  • @BelowtheRadar 是的。您是否知道这个问题已经存在大约一年并且已经得到解答?

标签: python django debugging django-models django-postgresql


【解决方案1】:

如果您想深入了解异常的细节,那么您可以编写自定义 middleware class 来包装视图处理并捕获未处理的 django.db.DatabaseError 并在调试会话中检查异常您的开发服务器的控制台:

from django.db import DatabaseError

class DatabaseErrorMiddleware(object):
    def process_view(self, request, view, args, kwargs):
       try:
           view(request, *args, **kwargs)   
       except DatabaseError as err:
           import pdb; pdb.set_trace()
           # You can now fully inspect the `e` exception object and it's context

这些异常是良性的,通常在线程的请求-响应流过早结束时发生,通常在开发过程中,如果您的客户端在应用程序返回响应之前中止连接,尽管这可能不是全部。

【讨论】:

    猜你喜欢
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 2023-03-27
    • 2012-12-05
    • 1970-01-01
    • 2019-06-03
    相关资源
    最近更新 更多