Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Writing APIs can be boring and repetitive work. Don't write another CRUDdy view in Django Rest Framework <http://github.com/tomchristie/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 <http://brobin.me/blog/2015/4/13/how-to-quickly-write-an-api-in-django>
_!
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.
|python| |pypi| |license| |travis| |django| |drf|
Installation
_Usage
_Serializers
_Views
_Urls
_Tests
_License
_Install with pip:
.. code-block:: bash
$ pip install drf-generators
or Clone the repo and install manually:
.. code-block:: bash
$ git clone https://github.com/brobin/drf-generators.git
$ cd drf-generators
$ python setup.py install
To use DRF Generators, add it your INSTALLED_APPS.
.. code-block:: python
INSTALLED_APPS = (
...
'rest_framework',
'drf_generators',
...
)
Note: In order to use the APIView classes, you must have the rest framework DEFAULT_PAGINATION_CLASS and PAGE_SIZE set.
.. code-block:: python
REST_FRAMEWORK = {
'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.
.. code-block:: bash
$ python manage.py 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.
.. code-block:: bash
$ python manage.py generate api --format function --force -- depth=2
Drf Generators will create serializers.py
for your application. It currently uses rest framework's ModelSerializer
for serialization of the models defined in models.py
.
.. code-block:: python
class ModelSerializer(serializers.ModelSerializer):
class Meta:
model = User
DRF Generators will create views.py
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 manage.py generate api --format viewset
.. code-block:: python
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 manage.py generate api --format apiview
.. code-block:: python
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 manage.py generate api --format function
.. code-block:: python
@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 manage.py generate api --format modelviewset
.. code-block:: python
class MyModelViewSet(ModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
Finally, DRF Generator will create you a default urls.py
to match the View format you are using.
.. code-block:: python
router = SimpleRouter()
router.register(r'model', views.ModelViewSet, 'Model')
urlpatterns = router.urls
.. code-block:: python
url(r'^model/([0-9]+)$', views.ModelAPIView.as_view()),
url(r'^model', views.ModelAPIListView.as_view()),
.. code-block:: python
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 <http://github.com/brobin/drf-generators/tree/master/tests>
_. Instructions on running the tests can be found in the test project's README.
MIT License. See LICENSE <https://github.com/brobin/drf-generators/blob/master/LICENSE>
_.
.. |python| image:: https://img.shields.io/pypi/v/drf-generators.svg?style=flat-square :target: https://pypi.python.org/pypi/drf-generators/ :alt: Supported Python versions
.. |pypi| image:: https://img.shields.io/pypi/pyversions/drf-generators.svg?style=flat-square :target: https://pypi.python.org/pypi/drf-generators/ :alt: Latest Version
.. |license| image:: https://img.shields.io/pypi/l/drf-generators.svg?style=flat-square :target: https://pypi.python.org/pypi/drf-generators/ :alt: License
.. |travis| image:: https://img.shields.io/travis/Brobin/drf-generators.svg?style=flat-square :target: https://travis-ci.org/Brobin/drf-generators/ :alt: Travis CI
.. |django| image:: https://img.shields.io/badge/Django-1.11, 2.2,3.0-orange.svg?style=flat-square :target: http://djangoproject.com/ :alt: Django 1.11, 2.2, 3.0
.. |drf| image:: https://img.shields.io/badge/DRF-3.11-orange.svg?style=flat-square :target: http://www.django-rest-framework.org/ :alt: DRF 3.11
FAQs
Generate DRF Serializers, Views, and urls for your API application.
We found that drf-generators demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.