232👍
JsonResponse
normally returns HTTP 200
, which is the status code for 'OK'
. In order to indicate an error, you can add an HTTP status code to JsonResponse
as it is a subclass of HttpResponse
:
response = JsonResponse({'status':'false','message':message}, status=500)
23👍
Return an actual status
JsonResponse(status=404, data={'status':'false','message':message})
- [Django]-How to output Django queryset as JSON?
- [Django]-How to check if ManyToMany field is not empty?
- [Django]-Whats the difference between a OneToOne, ManyToMany, and a ForeignKey Field in Django?
11👍
Python built-in http library has new class called HTTPStatus which is come from Python 3.5 onward. You can use it when define a status
.
from http import HTTPStatus
response = JsonResponse({'status':'false','message':message}, status=HTTPStatus.INTERNAL_SERVER_ERROR)
The value of HTTPStatus.INTERNAL_SERVER_ERROR.value
is 500
. When someone read your code it’s better define someting like HTTPStatus.<STATUS_NAME>
other than define an integer value like 500
. You can view all the IANA-registered status codes from python library here.
- [Django]-Django values_list vs values
- [Django]-Can't connect to local MySQL server through socket '/tmp/mysql.sock
- [Django]-How can I find the union of two Django querysets?
7👍
To change status code in JsonResponse
you can do this :
response = JsonResponse({'status':'false','message':message})
response.status_code = 500
return response
- [Django]-Gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3> django
- [Django]-How to add new languages into Django? My language "Uyghur" or "Uighur" is not supported in Django
- [Django]-Foreign key from one app into another in Django
4👍
This answer from Sayse works but it’s undocumented. If you look at the source you find that it passes the remaining **kwargs
to the superclass constructor, HttpStatus. However in the docstring they don’t mention that. I don’t know if it’s the convention to assume that keyword args will be passed to the superclass constructor.
You can also use it like this:
JsonResponse({"error": "not found"}, status=404)
I made a wrapper:
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)
- [Django]-Custom django admin templates not working
- [Django]-How to implement FirebaseDB with a Django Web Application
- [Django]-Celery missed heartbeat (on_node_lost)