如何在 Django 中更改 JsonResponse 的状态
How to change status of JsonResponse in Django
我的 API 在错误时返回一个 JSON 对象,但状态代码是 HTTP 200
:
response = JsonResponse({'status': 'false', 'message': message})
return response
如何更改响应代码以指示错误?
Return实际状态
JsonResponse(status=404, data={'status':'false','message':message})
JsonResponse
通常是returnsHTTP 200
,这是'OK'
的状态码。为了指示错误,您可以向 JsonResponse
添加 HTTP 状态代码,因为它是 HttpResponse
:
的子类
response = JsonResponse({'status':'false','message':message}, status=500)
要更改 JsonResponse
中的状态代码,您可以这样做:
response = JsonResponse({'status':'false','message':message})
response.status_code = 500
return response
Python built-in http 库有新的 class 称为 HTTPStatus which is come from 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
这样的整数值。您可以查看所有 IANA-registered status codes from python library here.
Sayse 的这个答案有效,但没有记录。 If you look at the source 你发现它将剩余的 **kwargs
传递给超类构造函数 HttpStatus。但是在文档字符串中他们没有提到这一点。我不知道假设关键字参数将传递给超类构造函数是否是惯例。
你也可以这样使用:
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)
我的 API 在错误时返回一个 JSON 对象,但状态代码是 HTTP 200
:
response = JsonResponse({'status': 'false', 'message': message})
return response
如何更改响应代码以指示错误?
Return实际状态
JsonResponse(status=404, data={'status':'false','message':message})
JsonResponse
通常是returnsHTTP 200
,这是'OK'
的状态码。为了指示错误,您可以向 JsonResponse
添加 HTTP 状态代码,因为它是 HttpResponse
:
response = JsonResponse({'status':'false','message':message}, status=500)
要更改 JsonResponse
中的状态代码,您可以这样做:
response = JsonResponse({'status':'false','message':message})
response.status_code = 500
return response
Python built-in http 库有新的 class 称为 HTTPStatus which is come from 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
这样的整数值。您可以查看所有 IANA-registered status codes from python library here.
Sayse 的这个答案有效,但没有记录。 If you look at the source 你发现它将剩余的 **kwargs
传递给超类构造函数 HttpStatus。但是在文档字符串中他们没有提到这一点。我不知道假设关键字参数将传递给超类构造函数是否是惯例。
你也可以这样使用:
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)