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 に答える