dr_scaffold
Scaffold django rest apis like a champion
Overview
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)
Supported field types
We support most of django field types.
Contributors
This project exists thanks to all the people who contribute. [Contribute]