2009-05-13 14 views

答えて

5

Djangoは、電子メールの最後にrepr(要求)を追加します。あなたは

としてログインしているユーザー「LOGNAME」見つけることができますデフォルトのWSGIの開発サーバーの使用:それは角括弧に包まれているよう「myuserのを」、

これは、一部の電子メールクライアントに隠すことができます。

にprocess_exception(自己、リクエスト、例外)

要求がのHttpRequestオブジェクトです:

<WSGIRequest 
GET:<QueryDict: {}>, 
POST:<QueryDict: {}>, 
... 
'LOGNAME': 'myuser', 
... 
wsgi.run_once': False, 
'wsgi.url_scheme': 'http', 
'wsgi.version': (1, 0)}> 

また、あなたはにprocess_exceptionメソッドを実装するカスタムミドルウェアを実装することができます。例外は、view関数によって生成されたExceptionオブジェクトです。

ビューが例外を発生させると、Djangoはprocess_exception()を呼び出します。 process_exception()は、NoneまたはHttpResponseオブジェクトを返さなければなりません。 HttpResponseオブジェクトを返すと、応答がブラウザに返されます。それ以外の場合は、デフォルトの例外処理が実行されます。

また、ミドルウェアは、応答フェーズでは逆の順序で実行されます。これにはprocess_exceptionが含まれます。例外ミドルウェアが応答を返すと、そのミドルウェアより上のミドルウェアクラスはまったく呼び出されません。

+0

+1ミドルウェアの提案...実際には、このアプローチをかなりうまく使用しています。 –

+0

これは少なくともDjango 1.9では動作しません(古いバージョンも影響を受ける可能性があります)。 – SaeX

4

@ jsamsaの回答は、Djangoの変更により、もはや真実ではないようです(少なくともエラーメールには「LOGNAME」フィールドはありません)。

私は完全なdjango htmlエラーページをメールで受け取るために、別の投稿をしています。上の詳細はこちら: https://docs.djangoproject.com/en/dev/topics/logging/#django.utils.log.AdminEmailHandler

と、このticketが親切にあなたがこれを行うことができますことを指摘:以降のDjangoバージョン1.10から

LOGGING['handlers']['mail_admins']['include_html'] = True 
+0

'include_html'を使うと、あなたはきれいなHTMLの電子メールを実際に受け取ることができますが、エラーの原因となったユーザのユーザ名はどこで見つけることができますか?少なくとも私はそれを見つけることができませんでした。 'logname'は私が郵送したものの一部ではありません。また、エラーが表示されたページがログインしているユーザーにしか見えないため、ユーザーがログインしたと確信しています。 – SaeX

関連する問題