Extras for DRF
Project description
DRF Rehive Extras
Extra utilities for using Django REST Framework.
Features
- Python >= 3.6
- Django >= 3.0
- Generic views and mixins for all CRUD.
- Custom pagination that supports cursor and page based pagination.
- Integrated support for flex fields and django filters.
- Base serializers.
- Metadata, timestamp, and enum serializer fields.
- Schema generation support via drf-spectacular.
Getting started
- Install the package:
pip install drf-rehive-extras
- Add "drf_rehive_extras" to your
INSTALLED_APPS
settings like this:
INSTALLED_APPS = [
# ...
'drf_rehive_extras',
]
Usage
Schema generation
This library allows you to use drf-spectacular
to generate Open API schemas that match the Rehive eveloped request/response format as defined by the drf-rehive-extras
views/serializers.
To use schema generation, install drf-spectacular
(in addition to drf-rehive-extras
as described above):
pip install drf-spectacular[sidecar]
And add the following to the INSTALLED_APPS
settings:
INSTALLED_APPS = [
# ...
'drf_spectacular',
'drf_spectacular_sidecar',
]
Finally, configure the REST_FRAMEWORK
settings with:
REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'drf_rehive_extras.schema.BaseAutoSchema',
}
The schema.BaseAutoSchema
class also includes functionality to attach
additional documentation to the schema via yaml files.
To generate additional documentation, create a docs.yaml
file in a docs
folder in your Django app. The file should be formatted like this:
app.views.ExampleView:
GET:
operationId:
summary:
description:
x-code-samples:
- lang:
label:
source: >
- lang: Python
label: Python SDK
source: >
Then, in your settings
file specify the above directory using the ADDITIONAL_DOCS_DIRS
settings:
import os
ADDITIONAL_DOCS_DIRS = [
"/root/app/docs/",
]
Pagination
This library adds extra pagination via PageNumberPagination
and CursorPagination
that can be used to generate paginated lists that return the results in the Rehive eveloped request/response format.
You can use them like this:
from drf_rehive_extras.pagination import PageNumberPagination
class ExampleView(ListAPIView)
pagination_class = PageNumberPagination
These pagination classes will be automatically applied to any views that inherit from the drf-rehive-extras
generics and mixins.
Serializers
This library includes base serializers that can be used to ensure all serializers share the same Rehive base:
BaseModelSerializer
: A DRFModelSerializer
that includesrest_flex_fields
functionality.ActionResponseSerializer
: A serializer that can be used to generate action responses.
Serializers fields
This library adds extra serializer fields that can be used in DRF serializers:
MetadataField
TimestampField
EnumField
These fields can be used like normal serializer fields.
Views
This library includes a collection of generic views and mixins that can be used to ensure all views follow the same Rehive standard.
The generic views can be used like this:
from drf_rehive_extras.generics import ListAPIView
class ListExampleModelView(ListAPIView):
serializer_class = ExampleModelSerializer
def get_queryset(self):
if getattr(self, 'swagger_fake_view', False):
return ExampleModel.objects.none()
return ExampleModel.objects.all().order_by('-created')
The generic views allow for the customization of the serializer based on the method. This can be done by adding a serializer_classes
attribute to the view:
# Single shared request/response serializer.
serializer_classes = {
"POST": ExampleModelRequestSerializer
}
# Multiple serializers, the first for the request and the second for the response.
serializer_classes = {
"POST": (ExampleModelRequestSerializer, ExampleModelResponseSerializer,)
}
The generic views also support explicitly modifying the response status for a given method. This can be done via the response_status_codes
attribute.
response_status_codes = {"POST": status.HTTP_202_ACCEPTED}
If possible, all generic views will attempt to add a _resource
and _resource_id
to the request object. This will only be done if there is a single model instance and the instance contains a RESOURCE
and/or RESOURCE_ID
attribute.
Finally, in addition to the normal DRF generic views, the library contains an extra ActionAPIView
that can be used for simple actions. These actions will default to a 200 response and will only ever return a {"status": "success"}
response.
Usage is as follows:
from drf_rehive_extras.generics import ActionAPIView
from drf_rehive_extras.serializers import ActionResponseSerializer
class ExampleActionView(ActionAPIView):
serializer_class = ExampleActionSerializer
serializer_classes = {
"POST": (ExampleActionSerializer, ActionResponseSerializer,)
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file drf-rehive-extras-2.2.3.tar.gz
.
File metadata
- Download URL: drf-rehive-extras-2.2.3.tar.gz
- Upload date:
- Size: 14.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.8.3 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.6.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6e4a03fb128501d271d731534b7b196aa7ba14ab273be22bee8329fad0941a8d |
|
MD5 | 4add843e388c106ae069b5fc84474d2a |
|
BLAKE2b-256 | 50e37218d4979bdf4d9bc66f39b2e8fd19c51363b60339e889cfea3feda763f1 |