5

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

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

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

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

4

1 回答 1

2

如果您想深入了解异常的详细信息,那么您可以编写一个自定义中间件类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

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

于 2013-09-20T13:11:13.747 回答