Scaffold django rest apis like a champion âš¡. said no one before
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 ...
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.
$ pip install dr-scaffold
INSTALLED_APPS = [
...
'dr_scaffold'
]
CORE_FOLDER = "core_dir/"
API_FOLDER = "api_dir/"
$ python manage.py dr_scaffold blog Post body:textfield author:foreignkey:Author
We support generating tests for your models and apis, you can generate tests by adding --tests
to your command like follow:
$ python manage.py dr_scaffold blog Author name:charfield --tests
This will generate factories for your models and their tests (ViewSets tests will be added soon), we depend on pytest
and factory_boy
so you should have them installed in order to run your tests.
Also bare in mind that you should run your migrations before running the tests
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)
We support most of django field types.
This project exists thanks to all the people who contribute. [Contribute]