我正在使用此代码
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的回应
答案 0 :(得分:2)
一般情况下,您可以注册自己的handler500并测试请求是否为ajax,然后从该返回返回ajax错误响应,指示DEBUG为True时发生的情况,或者如果DEBUG为False则仅发出一般错误。
其他选项是使用Firebug或Chrome Inspector来浏览Ajax响应,或者设置某种形式的日志记录,记录错误,即使在部署站点时这些错误也是有用的,以便对任何错误进行事后验证可能会发生。
Django本身具有内置的日志记录功能,其中一种功能是向管理员发送电子邮件,但您可以使用Django's integration with Python's built in logging定义自己的日志功能。这些处理程序的一个选项是django-sentry,我在我的所有生产站点上使用它来记录发生的任何错误,还包括覆盖handler500的能力,以便为最终用户提供可用于查看的参考号他们确切的错误实例。
Sentry附带了2个应用程序,一个是服务器,一个是客户端。在典型的生产设置中,当您有多台机器为同一站点提供服务时,您将拥有一个专门的岗哨服务器,只能执行哨兵。但是对于将其与网站集成在一起的单个网站来说还可以。
要配置哨兵,您需要将sentry
(服务器)和sentry.client
(客户端)添加到INSTALLED_APPS
。然后,您需要配置日志记录。
以下是一个例子:
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"handlers": {
"mail_admins": {
"class": "django.utils.log.AdminEmailHandler",
"level": "ERROR"
},
"sentry": {
"class": "sentry.client.handlers.SentryHandler",
"level": "ERROR",
}
},
"loggers": {
"django.request": {
"handlers": ["sentry", "mail_admins"],
"level": "ERROR",
"propagate": True
}
},
}
如果发生错误且DEBUG = False
,上述示例仍会向管理员发送电子邮件。如果您不希望这样做,请从mail_admins
上的处理程序中删除django.request
。
答案 1 :(得分:1)
前段时间我写了一个名为django-ajaxerrors的小工具,它是为这种情况精确设计的。它由连接错误响应的中间件组成,确定它们是否是AJAX请求的结果,并在新的浏览器窗口中打开django技术错误页面(因此发出请求的原始页面保持不变)。
我不知道人们如何在没有它的情况下做AJAX和django,但我可能在这里并不完全客观......