我有这个Ajax请求:
django-admin
在Django方面,我有时想传播错误。
如果我引发异常,它将作为500响应INTERNAL ERORR传播。
但我想显示一条错误消息。
所以我试过
$.ajax({
url: "my_url",
headers: {'X-CSRFToken': '{{ csrf_token }}'},
type: "post",
data:{x:1
},
success: function(response, textStatus, xhr) {
alert(response + textStatus + xhr);
},
error: function(xhr, ajaxOptions, thrownError) {
alert(xhr.status + ' Error: ' + thrownError);
}
});
}
但我无法捕获自定义错误消息。 有什么想法吗?
对于你们这些人,我们想知道什么有用:
return HttpResponse("Bad permissions", status=500)
答案 0 :(得分:3)
您可以采用的一种方法如下,
您可以在块周围的代码周围尝试异常块,这些代码容易引发异常。有很多Exception子类可以覆盖例如引发的异常类型。 Model.DoesNotExist。在这些异常块中,您只需创建适当的HttpResponse并将其发回。让我们举一个例子。
class DemoView(View):
def post(self, request, oid, *args, **kwargs):
try:
object = Model.objects.get(id=oid)
except Model.DoesNotExist:
return HttpResponseNotFound('error message')
这样你的错误块就会在你的ajax函数中执行。您可能会认为这是一种方法,对我来说似乎是一种正确的方法。
<强>更新强> 根据您在下面做出的评论(OP),您可以按照以下方式创建回复
def bad_request(message):
response = HttpResponse(json.dumps({'message': message}),
content_type='application/json')
response.status_code = 400
return response
当您想要返回状态400时,您只需
return bad_request(message='This is a bad request')
因此,在您的ajax错误函数中,您可以使用以下内容来获取该消息,
xhr.responseJSON.message
答案 1 :(得分:0)
这是Django 3.0和Python 3.0的版本。首先定义JsonResponse
的子类:
class FailedJsonResponse(JsonResponse):
def __init__(self, data):
super().__init__(data)
self.status_code = 400
在您自己的代码中使用它:
return FailedJsonResponse({"e": "Error message"})