Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Abdenasser/dr_scaffold
scaffold django rest apis like a champion π
https://github.com/Abdenasser/dr_scaffold
apps command-line-tool django django-rest-framework generator hacktoberfest json-api python rest-api scaffold scaffolding web
Last synced: 6 days ago
JSON representation
scaffold django rest apis like a champion π
- Host: GitHub
- URL: https://github.com/Abdenasser/dr_scaffold
- Owner: Abdenasser
- License: mit
- Created: 2021-08-19T19:57:43.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2023-10-02T23:49:26.000Z (about 1 year ago)
- Last Synced: 2024-11-08T11:55:46.859Z (10 days ago)
- Topics: apps, command-line-tool, django, django-rest-framework, generator, hacktoberfest, json-api, python, rest-api, scaffold, scaffolding, web
- Language: Python
- Homepage:
- Size: 15.5 MB
- Stars: 158
- Watchers: 9
- Forks: 15
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
- awesome-morocco - Dr_scaffold - scaffold django rest apis like a champion by [@Abdenasser](https://github.com/Abdenasser) (Uncategorized / Uncategorized)
- stars - Abdenasser/dr_scaffold - scaffold django rest apis like a champion π (Python)
- stars - Abdenasser/dr_scaffold - scaffold django rest apis like a champion π (Python)
README
dr_scaffold
Scaffold django rest apis like a champion β‘. said no one before
# Overview
This library will help you to scaffold full **Restful API Resources** in seconds using only one command:
```console
$ 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](https://www.abdenasser.com/2021/08/25/scaffold-django-apis-like-a-champion/), this library assumes that you have **Django Rest Framework**. if not, please refer to [this guide](https://www.django-rest-framework.org/#installation).
#### Install dr_scaffold package :
```console
$ pip install dr-scaffold
```#### Add dr_scaffold to your INSTALLED_APPS like this:
```python
INSTALLED_APPS = [
...
'dr_scaffold'
]
```#### Add CORE_FOLDER and API_FOLDER to your settings.py (optional):
```python
CORE_FOLDER = "core_dir/"
API_FOLDER = "api_dir/"
```#### Run your scaffolds like this:
```console
$ python manage.py dr_scaffold blog Post body:textfield author:foreignkey:Author
```# Generate tests
We support generating tests for your models and apis, you can generate tests by adding `--tests` to your command like follow:
```console
$ 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
# Generate ViewSet Mixins
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):```console
$ python manage.py dr_scaffold blog Author name:charfield --mixins CR
```The command will generate an Author API with a ViewSet like the
following:```python
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 querysetdef 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](CONTRIBUTING.md)]