dr_scaffold

Scaffold django rest apis like a champion

This library will help you to scaffold full Restful API Resources in seconds using only one command:

$ python manage.py dr_scaffold blog Post body:textfield author:foreignkey:Author

models.py with Models and fields generated by the CLI ⚡

admin.py with Models registered and ready ⚡

views.py with appropriate ViewSets ready⚡

urls.py with appropriate URLs ready.⚡

serializers.py with Model Serializers ready ⚡

and more ...

Installation and usage

For a detailed guide read scaffold django apis like a champion, this library assumes that you have Django Rest Framework. if not, please refer to this guide.

Install dr_scaffold package :

$ pip install dr-scaffold

Add dr_scaffold to your INSTALLED_APPS like this:

INSTALLED_APPS = [
    ...
    'dr_scaffold'
]

Add CORE_FOLDER and API_FOLDER to your settings.py (optional):

CORE_FOLDER = "core_dir/"
API_FOLDER = "api_dir/"

Run the your scaffolds like this:

$ python manage.py dr_scaffold blog Post body:textfield author:foreignkey:Author --mixins CRUD

Supported ViewSet types

We support two types of ViewSets, we support ModelViewSet and we
support ViewSets with Mixins.

  • ModelViewSets are the default that get generated with the
    dr_scaffold command
  • To generate a view with Mixins pass a value of what mixins you want
    to include like --mixins CRUD this will result in a view with the
    Create, List, Retrieve, Update, Destroy actions.

Let's generate an API that does only support the Create and Read
methods (Read is both list and retrieve):

$ python manage.py dr_scaffold blog Author name:charfield --mixins CR

The command will generate an Author API with a ViewSet like the
following:

class AuthorViewSet(
    mixins.CreateModelMixin,
    mixins.ListModelMixin,
    mixins.RetrieveModelMixin,
    viewsets.GenericViewSet
):
    queryset = Author.objects.all()
    serializer_class = AuthorSerializer
    #permission_classes = (permissions.IsAuthenticated,)

    def get_queryset(self):
        #user = self.request.user
        queryset = Author.objects.all()
        #insert specific queryset logic here
        return queryset

    def get_object(self):
        #insert specific get_object logic here
        return super().get_object()

    def create(self, request, *args, **kwargs):
        serializer = AuthorSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response(serializer.data)

    def list(self, request, *args, **kwargs):
        queryset = self.get_queryset()
        serializer = AuthorSerializer(queryset, many=True)
        return Response(serializer.data)

    def retrieve(self, request, *args, **kwargs):
        instance = self.get_object()
        serializer = AuthorSerializer(instance=instance)
        return Response(serializer.data)

GitHub

GitHub - Abdenasser/dr_scaffold: scaffold django rest apis like a champion ?
scaffold django rest apis like a champion ?. Contribute to Abdenasser/dr_scaffold development by creating an account on GitHub.