2009-05-13 7 views

Antwort

5

Django hängt Rep (Anfrage) am Ende der E-Mail an. Die Verwendung des Standard wsgi Entwicklungs-Server können Sie die als

angemeldeten Benutzer finden

‚LOGNAME‘: ‚myuser‘,

Dies kann in einigen E-Mail-Clients ausgeblendet werden, wie es in spitzen Klammern gewickelt ist.

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

Auch können Sie eine eigene Middleware implementieren, die die process_exception Methode implementiert:

process_exception (self, Anfrage, Ausnahme)

Anfrage ist ein Httprequest-Objekt. Ausnahme ist ein Exception-Objekt, das von der View-Funktion ausgelöst wird.

Django ruft process_exception() auf, wenn eine Ansicht eine Ausnahme auslöst. process_exception() sollte entweder None oder ein HttpResponse-Objekt zurückgeben. Wenn ein HttpResponse-Objekt zurückgegeben wird, wird die Antwort an den Browser zurückgegeben. Andernfalls wird die standardmäßige Ausnahmebehandlung gestartet.

Die Middleware wird in umgekehrter Reihenfolge während der Antwortphase ausgeführt, einschließlich process_exception. Wenn eine Ausnahme-Middleware eine Antwort zurückgibt, werden die Middleware-Klassen oberhalb dieser Middleware überhaupt nicht aufgerufen.

+0

+1 für Vorschlag von Middleware ... tatsächlich verwenden wir diesen Ansatz ziemlich erfolgreich. –

+0

Dies funktioniert nicht mehr für mindestens Django 1.9 (ältere Versionen könnten ebenfalls betroffen sein). – SaeX

4

@ jsamsa's Antwort scheint aufgrund von Änderungen in Django nicht mehr wahr zu sein (zumindest bekomme ich kein "LOGNAME" -Feld in Fehler-E-Mails).

Ich poste eine Alternative, um die vollständige django HTML-Fehlerseite per E-Mail zu erhalten. Details auf diesem sind hier: https://docs.djangoproject.com/en/dev/topics/logging/#django.utils.log.AdminEmailHandler

und diese ticket helfend weist darauf hin, dass Sie dies tun können:

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

Mit 'include_html' bekommst du in der Tat ziemlich HTML per E-Mail, aber wo finde ich den Benutzernamen des Benutzers, der den Fehler verursacht hat? Zumindest konnte ich es nicht finden. 'logname' ist nicht Teil dessen, was ich gesendet habe. Außerdem bin ich sicher, dass der Benutzer angemeldet war, da die Seite, auf der der Fehler angezeigt wurde, nur für angemeldete Benutzer sichtbar ist. – SaeX

Verwandte Themen