Django - 如何在Django错误页面中获取DatabaseError“当前事务被中止”的调试信息?

时间:2013-03-03 17:38:04

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

在我的Django项目上进行开发时,我遇到了一个说:

的DatabaseError
  

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

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

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

1 个答案:

答案 0 :(得分:2)

如果您想了解异常的详细信息,那么您可以编写自定义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

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