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

git*_*rik 5 python django debugging django-models django-postgresql

在我的Django项目上进行开发时,我得到一个DatabaseError,它说:

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

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

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

Fil*_*vić 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
Run Code Online (Sandbox Code Playgroud)

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