我的 API 在错误时返回一个 JSON 对象,但状态码是 HTTP 200
:
response = JsonResponse({'status': 'false', 'message': message})
return response
如何更改响应代码以指示错误?
我的 API 在错误时返回一个 JSON 对象,但状态码是 HTTP 200
:
response = JsonResponse({'status': 'false', 'message': message})
return response
JsonResponse
通常返回HTTP 200
,这是代表'OK'
的状态码。为了指示错误,您可以将HTTP状态码添加到JsonResponse
中,因为它是HttpResponse
的子类:
response = JsonResponse({'status':'false','message':message}, status=500)
返回实际状态
JsonResponse(status=404, data={'status':'false','message':message})
Python内置的HTTP库有一个叫做HTTPStatus的新类,它是从Python 3.5开始引入的。在定义status
时可以使用它。
from http import HTTPStatus
response = JsonResponse({'status':'false','message':message}, status=HTTPStatus.INTERNAL_SERVER_ERROR)
HTTPStatus.INTERNAL_SERVER_ERROR.value
的值为 500
。当有人阅读你的代码时,最好定义像 HTTPStatus.<STATUS_NAME>
这样的东西,而不是定义像 500
这样的整数值。您可以从 Python 库此处 查看所有IANA注册状态码。
JsonResponse
中更改状态码,可以这样做:response = JsonResponse({'status':'false','message':message})
response.status_code = 500
return response
JsonResponse({"error": "not found"}, status=404)
from django.http.response import JsonResponse
class JsonResponseWithStatus(JsonResponse):
"""
A JSON response object with the status as the second argument.
JsonResponse passes remaining keyword arguments to the constructor of the superclass,
HttpResponse. It isn't in the docstring but can be seen by looking at the Django
source.
"""
def __init__(self, data, status=None, encoder=DjangoJSONEncoder,
safe=True, json_dumps_params=None, **kwargs):
super().__init__(data, encoder, safe, json_dumps_params, status=status, **kwargs)