Handling HTTP Status Codes in Django Rest Framework

HTTP status codes are essential communication tools between servers and clients, indicating the outcome of a request. In Django Rest Framework (DRF), proper handling of status codes is crucial to provide clear responses and manage various scenarios effectively. In this blog, we’ll explore the significance of HTTP status codes, understand their meanings, and provide practical examples of handling them in DRF.

Understanding HTTP Status Codes

HTTP status codes are three-digit numbers returned by a server in response to a client’s request. They offer insight into the result of the request and guide the client on how to proceed. Status codes are grouped into five categories, each serving a specific purpose:

  • 1xx (Informational): The request was received, and the client should wait for further instructions.
  • 2xx (Successful): The request was successfully received, understood, and accepted.
  • 3xx (Redirection): The client needs to take additional action to complete the request.
  • 4xx (Client Error): The client’s request contains errors or cannot be fulfilled.
  • 5xx (Server Error): The server failed to fulfill a valid request.

Some comman HTTP status code:

  • 200 OK
  • 201 Created
  • 204 No Content
  • 400 Bad Request
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found
  • 405 Method Not Allowed
  • 406 Not Acceptable
  • 415 Unsupported Media Type
  • 500 Internal Server Error

Handling Status Codes in DRF

DRF provides built-in ways to handle status codes effectively using serializers, views, and response objects. Let’s dive into practical examples of handling status codes in various contexts.

Using Serializers

Serializers in DRF allow you to define the desired status code in the status_code attribute. For instance, when creating an object, you can set the status code to 201 Created:

from rest_framework import serializers

class ItemSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=100)

    def create(self, validated_data):
        item = Item.objects.create(**validated_data)
        return item, 201  # Set status code to 201 Created

In Views

In views, you can use DRF’s Response object to customize the response and set the appropriate status code:

from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status
from rest_framework.exceptions import NotFound

class MyView(APIView):
    def get(self, request):
        data = {'message': 'Success!'}
        return Response(data, status=200)  # Set status code to 200 OK

def MyView2(request):
    data = {'message': 'Error!'}
    return Response(data, status=status.HTTP_400_BAD_REQUEST)

def MyView3(request):
    raise NotFound('Resource not found')


Handling HTTP status codes in Django Rest Framework is an essential skill for effective API development. By understanding the meanings and contexts of various status codes, you can provide clients with informative responses and guide their actions accordingly.

Whether you’re creating serializers, views, or custom responses, DRF offers intuitive ways to set the correct status codes. This ensures proper communication between your API and its clients, contributing to a seamless user experience and robust API interactions.

Blogs You Might Like to Read!