2011-02-09 50 views

回答

7

因为process_exception中间件被传入的请求对象,你可以添加你喜欢的任何信息,以request.META

class ErrorMiddleware(object): 
    """ 
    Alter HttpRequest objects on Error 
    """ 

    def process_exception(self, request, exception): 
     """ 
     Add user details. 
     """ 
     request.META['USER'] = request.user.username 
2

制作一个具有process_exception方法的中间件。 http://docs.djangoproject.com/en/dev/topics/http/middleware/#process-exception

import sys 
import traceback 
from django.conf import settings 
from django.core.mail import mail_admins 

class ProcessExceptionMiddleware(object): 
    def process_exception(self, request, exception): 
     if not settings.DEBUG: 
      msg = '\n\n'.join([request.user, request.GET, request.POST, \ 
       request.COOKIES, request.META, traceback.format_exc(*sys.exc_info())]) 

      mail_admins("Error!", msg) 

我希望给你一些想法!

+0

这是大量的帮助,谢谢:)不幸的是,你不能阻止BaseHandler继续处理错误并因此发送给你一个电子邮件,除非你返回一个HTTPResponse ...并获得两个电子邮件的每个错误是过度杀伤 – 2011-02-09 14:46:48

+0

哦,哎。文档甚至建议让管理员空白以停止自动发送电子邮件,这样你就是对的,这是行不通的。不错的解决方案!这是一个很干净的地狱。 – 2011-02-09 14:56:24

相关问题