Skip to main content

DRF mixins & viewsets with action-based serializer support.

Project description

DRF Action Kit

DRF Action Kit is a Python package that enables action-based serializer selection in Django REST Framework.
It allows defining different serializers for actions (list, retrieve, create, update, etc.) and provides fallback serializers based on HTTP methods.

Features

  • Action-based serializer support:
    • list_serializer_class, retrieve_serializer_class, create_serializer_class, update_serializer_class, etc.
  • Fallback serializer support:
    • read_serializer_class for GET requests
    • write_serializer_class for POST, PUT, PATCH, DELETE
    • serializer_class as ultimate fallback
  • Works with:
    • ModelViewSet
    • ReadOnlyModelViewSet
    • GenericViewSet + mixins
    • APIView and GenericAPIView
  • Custom exception handling: SerializerNotFoundError
  • Clean, extendable, and testable

Installation

Install from PyPI:

pip install drf-action-kit

Usage

  1. ModelViewSet Example
from rest_framework import routers
from myapp.models import Post
from myapp.serializers import PostListSerializer, PostDetailSerializer, PostCreateSerializer, PostUpdateSerializer
from drf_action_kit.action_serializer import ActionSerializerModelViewSet

class PostViewSet(ActionSerializerModelViewSet):
    serializer_class = PostDetailSerializer       # Fallback
    read_serializer_class = PostDetailSerializer
    write_serializer_class = PostCreateSerializer

    # Action-specific serializers
    list_serializer_class = PostListSerializer
    retrieve_serializer_class = PostDetailSerializer
    create_serializer_class = PostCreateSerializer
    update_serializer_class = PostUpdateSerializer

router = routers.DefaultRouter()
router.register(r"posts", PostViewSet)
  1. GenericViewSet + Mixins Example
from rest_framework import mixins, viewsets
from myapp.serializers import PostListSerializer, PostCreateSerializer
from drf_action_kit.action_serializer import ActionSerializerGenericViewSet

class PostListCreateView(ActionSerializerGenericViewSet,
                         mixins.ListModelMixin,
                         mixins.CreateModelMixin,
                         viewsets.GenericViewSet):
    serializer_class = PostListSerializer
    read_serializer_class = PostListSerializer
    write_serializer_class = PostCreateSerializer

    list_serializer_class = PostListSerializer
    create_serializer_class = PostCreateSerializer
  1. APIView Example
from rest_framework.views import APIView
from rest_framework.response import Response
from myapp.serializers import PostDetailSerializer, PostCreateSerializer
from drf_action_kit.action_serializer import ActionSerializerAPIView

class PostAPIView(ActionSerializerAPIView):
    read_serializer_class = PostDetailSerializer
    write_serializer_class = PostCreateSerializer

    def get(self, request, *args, **kwargs):
        serializer = self.get_serializer_class()(data={"title": "example"})
        return Response(serializer.data)

    def post(self, request, *args, **kwargs):
        serializer = self.get_serializer_class()(data=request.data)
        serializer.is_valid(raise_exception=True)
        return Response(serializer.data)

Serializer Selection Logic

  1. Action-specific serializer
  • Uses list_serializer_class, create_serializer_class, etc. if defined.
  1. Fallback by HTTP method
  • GET/HEAD/OPTIONS → read_serializer_class

  • POST/PUT/PATCH/DELETE → write_serializer_class

  1. Default serializer

Uses serializer_class if no action or HTTP-specific serializer is found.

  1. Error handling
  • Raises SerializerNotFoundError if no suitable serializer is available.

Custom Exception

from drf_action_kit.exceptions import SerializerNotFoundError

Contact

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

drf_action_kit-0.1.0.tar.gz (4.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

drf_action_kit-0.1.0-py3-none-any.whl (4.6 kB view details)

Uploaded Python 3

File details

Details for the file drf_action_kit-0.1.0.tar.gz.

File metadata

  • Download URL: drf_action_kit-0.1.0.tar.gz
  • Upload date:
  • Size: 4.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for drf_action_kit-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c955a2cdc8ebc87a4a235ac4819a0596f32c25c1509c37ed257d36094c513f8d
MD5 344a0b1da1fa10f45874bec554636f4b
BLAKE2b-256 36094aba19f8dd344af9b059a0c68a87daf7d7f8b889bb805ed9b8a2e90e14de

See more details on using hashes here.

File details

Details for the file drf_action_kit-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: drf_action_kit-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 4.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for drf_action_kit-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 368db79cbd041012d6ed331ab0794bc70d5ad76b07faa3f527bf61d71c661fec
MD5 b3c6caf78bc5b972ad9b2675a9bf6ac5
BLAKE2b-256 271397e07d5cecf6b49d6d219ec7d2bc668e97c8c476f5557e02c8ab30c11e36

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page