Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

Generate DRF Serializers, Views, and urls for your API aplication.

Project Description

DRF Generators

Writing APIs can be boring and repetitive work. Don’t write another CRUDdy view in Django Rest Framework. With DRF Generators, one simple command will generate all of your Views, Serializers, and even Urls for your Django Rest Framework application!

For a full step-by-step tutorial, check out my blog post!

This is not intended to give you a production quality API. It was intended to jumpstart your development and save you from writing the same code over and over for each model.


Install with pip:

$ pip install drf-generators

or Clone the repo and install manually:

$ git clone
$ cd drf-generators
$ python install

To use DRF Generators, add it your INSTALLED_APPS.


Note: In order to use the APIView classes, you must have the rest framework DEFAULT_PAGINATION_CLASS and PAGE_SIZE set.

    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 15


To use the generators, run the following command, where app is the application to generate an API for.

$ python generate {app} {options}
Option Action
--serializers Generate only Serializers for your app.
--views Generate only Views for your app.
--urls Generate only urls for your app.
--force Overwrite existing files without the warning prompt.
-f, --format Format to use when generating views and urls. Valid options: viewset, apiview, function, modelviewset. Default: viewset.
-d, --depth Serialization depth for related models. Default: 0

Example: Generate everything for the app api with function style views, overwriting existing files, with a serialization depth of 2.

$ python generate api --format function --force -- depth=2


Drf Generators will create for your application. It currently uses rest framework’s ModelSerializer for serialization of the models defined in

class ModelSerializer(serializers.ModelSerializer):

    class Meta:
        model = User


DRF Generators will create for your application. It can generate ViewSet, APIView and function based views. Set the --format option when running the generator to pick the preferred style


python generate api  --format viewset

class ModelViewSet(ViewSet):

    def list(self, request):
    def create(self, request):
    def retrieve(self, request, pk=None):
    def update(self, request, pk=None):
    def destroy(self, request, pk=None):


python generate api --format apiview

class ModelAPIView(APIView):

    def get(self, request, id, format=None):
    def put(self, request, id, format=None):
    def delete(self, request, id, format=None):

class ModelAPIListView(APIView):

    def get(self, request, format=None):
    def post(self, request, format=None):


python generate api --format function

@api_view(['GET', 'POST'])
def model_list(request):
    if request.method == 'GET':
    elif request.method == 'POST':

@api_view(['GET', 'PUT', 'DELETE'])
def model_detail(request, pk):
    if request.method == 'GET':
    elif request.method == 'PUT':
    elif request.method == 'DELETE':


python generate api --format modelviewset

class MyModelViewSet(ModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer


Finally, DRF Generator will create you a default to match the View format you are using.

ViewSet & ModeViewSet Routes

router = SimpleRouter()

router.register(r'model', views.ModelViewSet, 'Model')

urlpatterns = router.urls

APIView urls

url(r'^model/([0-9]+)$', views.ModelAPIView.as_view()),
url(r'^model', views.ModelAPIListView.as_view()),

Function urls

urlpatterns = [

    url(r'^model/(?P<pk>[0-9]+)$', views.model_detail),
    url(r'^model/$', views.model_list),


urlpatterns = format_suffix_patterns(urlpatterns)


A full application built with drf-generators can be found in the tests directory. Instructions on running the tests can be found in the test project’s README.


MIT License. See LICENSE.

Release History

This version
History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


Download Files

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

Filename, Size & Hash SHA256 Hash Help File Type Python Version Upload Date
(9.4 kB) Copy SHA256 Hash SHA256
Source None Mar 8, 2017

Supported By

Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Google Google Cloud Servers