如何在Django中接收AJAX请求中的服务器错误

如何在Django中接收AJAX请求中的服务器错误,django,django-models,django-forms,Django,Django Models,Django Forms,我正在使用这个代码 if form.is_valid(): form.save() if request.POST.get('ajax') == 'true': return HttpResponse('Data Entered Successfully') # Redirect after POST else: return HttpResponseRedi

我正在使用这个代码

if form.is_valid(): 
            form.save()
            if request.POST.get('ajax') == 'true':
                return HttpResponse('Data Entered Successfully') # Redirect after POST
            else:
                return HttpResponseRedirect('/thanks/') # Redirect after POST
我通过jquery POST方法提交表单

问题是,每当我有一些错误,比如缩进,或者模型错误,我就什么也得不到。我必须通过禁用ajax和通过普通方法提交来测试页面,然后我看到黄色的django错误页面,然后纠正错误


是否有任何方法,即使我得到任何错误,我认为作为对jquery的响应,通常您可以注册自己的handler500并测试请求是否为ajax,然后从中返回一个ajax错误响应,该响应指示如果调试为真发生了什么,或者如果调试为假,则只给出一个一般错误

其他选项是使用Firebug或Chrome Inspector浏览Ajax响应,或者设置某种形式的日志记录错误,即使在部署站点时也很有用,以便对可能发生的任何错误进行事后检查

Django本身具有内置的日志功能,其中之一是向管理员发送电子邮件,但您可以使用它定义自己的日志。处理程序的一个选项是,我在所有生产站点上都使用它来记录发生的任何错误,还包括覆盖handler500的功能,以便为最终用户提供一个可用于查找其确切错误实例的参考号

Sentry有两个应用程序,一个是服务器,一个是客户端。在一个典型的生产环境中,当您有多台机器为同一站点服务时,您将有一个专用的sentry服务器,该服务器只执行sentry操作。但是,对于单个站点,将其与站点集成是可以的

要配置sentry,您需要将
sentry
(服务器)和
sentry.client
(客户端)添加到
已安装的应用程序中。然后您需要配置日志记录

以下是一个例子:

日志记录={
“版本”:1,
“禁用现有日志记录器”:False,
“处理程序”:{
“邮件管理员”:{
“类”:“django.utils.log.AdminEmailHandler”,
“级别”:“错误”
},
“哨兵”:{
“类”:“sentry.client.handlers.SentryHandler”,
“级别”:“错误”,
}
},
“伐木工人”:{
“django.request”:{
“处理者”:[“哨兵”、“邮件管理员”],
“级别”:“错误”,
“传播”:正确
}
},
}

如果出现错误且
DEBUG=False
,上述示例仍将向管理员发送电子邮件。如果您不想让它这样做,请从
django.request

上的处理程序中删除
mail\u admins
。通常,您可以注册自己的handler500并测试请求是否为ajax,然后从中返回一个ajax错误响应,指示调试为真时发生的情况,或者如果DEBUG为False,则只给出一个常规错误

其他选项是使用Firebug或Chrome Inspector浏览Ajax响应,或者设置某种形式的日志记录错误,即使在部署站点时也很有用,以便对可能发生的任何错误进行事后检查

Django本身具有内置的日志功能,其中之一是向管理员发送电子邮件,但您可以使用它定义自己的日志。处理程序的一个选项是,我在所有生产站点上都使用它来记录发生的任何错误,还包括覆盖handler500的功能,以便为最终用户提供一个可用于查找其确切错误实例的参考号

Sentry有两个应用程序,一个是服务器,一个是客户端。在一个典型的生产环境中,当您有多台机器为同一站点服务时,您将有一个专用的sentry服务器,该服务器只执行sentry操作。但是,对于单个站点,将其与站点集成是可以的

要配置sentry,您需要将
sentry
(服务器)和
sentry.client
(客户端)添加到
已安装的应用程序中。然后您需要配置日志记录

以下是一个例子:

日志记录={
“版本”:1,
“禁用现有日志记录器”:False,
“处理程序”:{
“邮件管理员”:{
“类”:“django.utils.log.AdminEmailHandler”,
“级别”:“错误”
},
“哨兵”:{
“类”:“sentry.client.handlers.SentryHandler”,
“级别”:“错误”,
}
},
“伐木工人”:{
“django.request”:{
“处理者”:[“哨兵”、“邮件管理员”],
“级别”:“错误”,
“传播”:正确
}
},
}

如果出现错误且
DEBUG=False
,上述示例仍将向管理员发送电子邮件。如果您不希望它这样做,请从
django.request

上的处理程序中删除
mail\u admins
,不久前我编写了一个名为。它由中间件组成,可以钩住错误响应,确定它们是否是AJAX请求的结果,并在新的浏览器窗口中打开django技术错误页面(因此发出请求的原始页面保持不变)


我不知道人们在没有它的情况下如何使用AJAX和django,但我可能在这里并不完全客观…

不久前,我编写了一个名为的小实用程序,它正是为这个场景而设计的。它由中间件组成,可以钩住错误响应,确定它们是否是AJAX请求的结果,并在新的浏览器窗口中打开django技术错误页面(因此发出请求的原始页面保持不变)


我不知道人们在没有它的情况下如何使用AJAX和django,但我可能在这里并不完全客观…

在Firebug或Chrome inspector中,您甚至可以浏览AJAX响应并检查错误是什么。为什么您的测试没有捕捉到语法错误?我正在从桌面构建应用程序并进行许多更改。我在测试自己,因为我有问题。这个