django-pretty-response
This is a simple middleware in Django that creates clean-formatted responses, covering cases where Django and DRF are used to respond with API calls.
😄 Success
{
"ok": true,
"result": { "your_defined_data": "value" }
}
😢 Failure
{
"ok": false
"error": {
"status_code": "HTTP Status Code",
"code": "Defined Error Code (Only supported in DRF)",
"message": "Detailed information about the error"
}
}
Install
$ pip install django-pretty-response
Then add django_pretty_response.middleware.ResponseMiddleware
to the end your MIDDLEWARE in settings.py.
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
...
"django_pretty_response.middleware.ResponseMiddleware" # Add this line!
]
Examples
Django Only
from django.http import HttpResponse
def ping(request, *args, **kwargs):
return HttpResponse("pong")
returns
{
"ok": true,
"result": "pong"
}
from django.http import HttpResponse
def ping(request, *args, **kwargs):
return HttpResponse("not found", status=404)
returns
{
"ok": false
"error": {
"status_code": 404,
"message": "not found"
}
}
from django.http import HttpResponseBadRequest
def ping(request, *args, **kwargs):
return HttpResponseBadRequest("invalid parameter")
returns
{
"ok": false
"error": {
"status_code": 400,
"message": "invalid parameter"
}
}
DRF
from rest_framework.response import Response
from rest_framework.decorators import api_view
@api_view(['GET'])
def ping(request, *args, **kwargs):
return Response("pong")
returns
{
"ok": true,
"result": "pong"
}
from rest_framework.response import Response
from rest_framework.decorators import api_view
from rest_framework.exceptions import ValidationError
@api_view(['GET'])
def ping(request, *args, **kwargs):
raise ValidationError(detail="check your parameters", code="invalid value")
returns
{
"ok": false
"error": {
"status_code": 400,
"code": "invalid value",
"message": "check your parameter"
}
}
You can also customize your error fields.
from rest_framework.response import Response
from rest_framework.decorators import api_view
@api_view(['GET'])
def ping(request, *args, **kwargs):
return Response({"hint": "check your parameters"}, status=400)
returns
{
"ok": false
"error": {
"status_code": 400,
"hint": "check your parameters"
}
}