Skip to main content

Test Coverage

Django REST Framework Batteries

Build clean APIs with DRF faster.

Overview

Here's a quick overview of what the library has at the moment:

  • Action-based serializers for ViewSets
  • Two serializers per request/response cycle for ViewSets and GenericAPIViews
  • Action-based permissions for ViewSets
  • Single format for all errors

Requirements

  • Python ≥ 3.8
  • Django ≥ 3.2
  • Django REST Framework ≥ 3.12

Installation

$ pip install django-rest-batteries

Usage

Action-based serializers for ViewSets

Each action can have a separate serializer:

from rest_batteries.mixins import RetrieveModelMixin, ListModelMixin
from rest_batteries.viewsets import GenericViewSet
...

class OrderViewSet(RetrieveModelMixin,
                   ListModelMixin,
                   GenericViewSet):
    response_action_serializer_classes = {
        'retrieve': OrderSerializer,
        'list': OrderListSerializer,
    }

Two serializers per request/response cycle

We found that more often than not we need a separate serializer for handling request payload and a separate serializer for generating response data.

How to achieve it in ViewSet:

from rest_batteries.mixins import CreateModelMixin, ListModelMixin
from rest_batteries.viewsets import GenericViewSet
...

class OrderViewSet(CreateModelMixin,
                   ListModelMixin,
                   GenericViewSet):
    request_action_serializer_classes = {
        'create': OrderCreateSerializer,
    }
    response_action_serializer_classes = {
        'create': OrderResponseSerializer,
        'list': OrderResponseSerializer,
        'cancel': OrderResponseSerializer,
    }

How to achieve it in GenericAPIView:

from rest_batteries.generics import CreateAPIView
...


class OrderCreateView(CreateAPIView):
    request_serializer_class = OrderCreateSerializer
    response_serializer_class = OrderResponseSerializer

Action-based permissions for ViewSets

Each action can have a separate set of permissions:

from rest_batteries.mixins import CreateModelMixin, UpdateModelMixin, ListModelMixin
from rest_batteries.viewsets import GenericViewSet
from rest_framework.permissions import AllowAny, IsAuthenticated
...

class OrderViewSet(CreateModelMixin,
                   UpdateModelMixin,
                   ListModelMixin,
                   GenericViewSet):
    action_permission_classes = {
        'create': IsAuthenticated,
        'update': [IsAuthenticated, IsOrderOwner],
        'list': AllowAny,
    }

Single format for all errors

We believe that having a single format for all errors is good practice. This will make the process of displaying and handling errors much simpler for clients that use your APIs.

Any error always will be a JSON object with a message, code (identifier of the error), and field if the error is specific to a particular field. How your response could look like:

{
    "errors": [
        {
            "message": "Delete or cancel all reservations first.",
            "code": "invalid"
        },
        {
            "message": "Ensure this field has no more than 21 characters.",
            "code": "max_length",
            "field": "address.work_phone"
        },
        {
            "message": "This email already exists",
            "code": "unique",
            "field": "login_email"
        }
    ]
}

You will not have a single format out-of-the-box after installation. You need to add an exception handler to your DRF settings:

REST_FRAMEWORK = {
    ...
    'EXCEPTION_HANDLER': 'rest_batteries.exception_handlers.errors_formatter_exception_handler',
}

Credits

Metadata

Release files for django-rest-batteries 1.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-rest-batteries 1.4.1
File Size Uploaded
django_rest_batteries-1.4.1.tar.gz 8.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-rest-batteries 1.4.1
File Interpreter ABI Platform
django_rest_batteries-1.4.1-py3-none-any.whl Python 3 none any Details

Total release size: 17.8 kB

Release files / django_rest_batteries-1.4.1.tar.gz

Download URL django_rest_batteries-1.4.1.tar.gz
Size 8.8 kB
Tags Source
SHA-256 checksum
How to use checksums
7ee0ce97c0c678dbc2949aba011d7170c61a525bece83986c7e8f5698698f768
BLAKE2b-256 checksum
How to use checksums
9027b1aa26973f4ffb8a7ee39f1b8d4346786d3dd61431195c52fbeab0f96230
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.3.2 CPython/3.10.12 Linux/5.15.0-1041-azure

Release files / django_rest_batteries-1.4.1-py3-none-any.whl

Download URL django_rest_batteries-1.4.1-py3-none-any.whl
Size 9.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
236918b0671bdb12fd13240ae56df78512d0552cb3de4799509164e3629ef20c
BLAKE2b-256 checksum
How to use checksums
19a02638f2da83ba198a76179e194b1ac3db5e4d2e780ceb5f7de42f17c2355e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.3.2 CPython/3.10.12 Linux/5.15.0-1041-azure

Release history Release notifications | RSS feed

This release

1.4.1 This release

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page