Django Rest framework Extensions
Project description
Django REST framework Ext
Some extensions of Django REST framework.
Pagination
DynamicSizePageNumberPagination
Support setting PAGE_QUERY_PARAM
(default is page
) parameter to specify the page size for querying.
Return all data when the PAGE_QUERY_PARAM
(default is limit
) parameter is not specified.
Usage:
REST_FRAMEWORK = {
...
'DEFAULT_PAGINATION_CLASS': 'rest_framework_ext.pagination.DynamicSizePageNumberPagination',
...
}
REST_FRAMEWORK_EXT = {
'PAGE_QUERY_PARAM': 'page', # Default is page (If not set)
'PAGE_SIZE_QUERY_PARAM': 'limit',
}
Request:
GET https://api.example.org/accounts/?page=4&limit=100
Permissions
DjangoModelPermissions
Add view
permission control.
Usage:
from rest_framework_ext.permissions import DjangoModelPermissions
ReadOnly
Requests will only be permitted if the request method is one of the "safe" methods (GET
, HEAD
or OPTIONS
).
Usage:
from rest_framework_ext.permissions import ReadOnly
IsCurrentUser
Determine whether the object is the current login user.
Usage:
from rest_framework_ext.permissions import IsCurrentUser
IsSuperuser
Determine whether the request user is superuser.
Usage:
from rest_framework_ext.permissions import IsSuperuser
HasPermission
Mainly used for providing permission validation to @api_view
.
from rest_framework_ext.permissions import HasPermission
@api_view(['GET'])
@permission_classes([HasPermission('user.change_user')])
def change_user(request):
...
Serializers
RecursiveSerializer
Usage:
models.py:
from django.db import models
class Department(models.Model):
name = models.CharField('Name', max_length=100)
parent = models.ForeignKey('self', related_name='children', verbose_name='Parent')
serializers.py:
from rest_framework import serializers
from rest_framework_ext.serializers import RecursiveSerializer
class DepartmentTreeListSerializer(serializers.ModelSerializer):
children = RecursiveSerializer(many=True)
class Meta:
model = Department
fields = '__all__'
Response:
[{
"id": 1,
"children": [{
"id": 2,
"children": [{
"id": 3,
"children": [{
"id": 4,
"children": [],
"name": "aaa",
"parent": 3
}],
"name": "ddd",
"parent": 2
}, {
"id": 5,
"children": [{
"id": 6,
"children": [],
"name": "eee",
"parent": 7
}],
"name": "xxx",
"parent": 2
}],
"name": "yyy",
"parent": 1
}],
"name": "zzz",
"parent": null
}]
ExportModelSerializer
Use verbose name or label replace field name.
Usage:
models.py:
from django.db import models
class Department(models.Model):
name = models.CharField('Name', max_length=100)
created_by = models.ForeignKey(User, null=False, verbose_name='created by')
serializers.py:
from rest_framework import serializers
from rest_framework_ext.serializers import ExportModelSerializer
class DepartmentExportSerializer(ExportModelSerializer):
created_by = serializers.StringRelatedField(label='Created By', read_only=True)
class Meta:
model = Department
fields = ['name', 'created_by']
Response:
[{
"Name": "aaa",
"Created By": "John"
}]
DynamicFieldsModelSerializer
It's copied from official document.
Use fields
to specify the fields to be used by a serializer at the point of initializing it.
Or use exclude
to specify the fields to be excluded by a serializer at the point of initializing it.
Usage:
models.py:
from django.db import models
class Parent(models.Model):
name = models.CharField('name', max_length=100)
class Child(models.Model):
name = models.CharField('name', max_length=100)
parent = models.ForeignKey(Parent, verbose_name='parent')
serializer.py:
from rest_framework import serializers
from rest_framework_ext.serializers import DynamicFieldsModelSerializer
class ChildSerializer(DynamicFieldsModelSerializer):
class Meta:
model = Child
fields = '__all__'
class ParentSerializer(serializers.ModelSerializer):
children = ChildSerializer(many=True, read_only=True, exclude=['parent'])
Mixins
MultiFieldLookupMixin
From Multiple lookup_fields for django rest framework.
Used for multi field lookup.
Usage:
views.py:
from rest_framework import viewsets
from rest_framework_ext.views import MultipleFieldLookupMixin
class ExampleViewSet(MultipleFieldLookupMixin, viewsets.ModelViewSet):
lookup_fields = ['pk', 'field_one', 'field_two']
urls.py:
from django.urls import path
from . import views
urlpatterns = [
path(r'examples/<str:field_one>/<str:field_two>/', views.ExampleViewSet.as_view({'get': 'retrieve'}))
]
ViewSets
ExportModelViewSet
Use epxort
action and ExportPermission
to exporting data.
Utils
get_default_query_params
Get default query params.
Views
exception_handler
Some exception handlers.
Usage:
REST_FRAMEWORK = {
...
'EXCEPTION_HANDLER': 'rest_framework_ext.views.exception_handler',
...
}
Validators
ActiveValidator
Validate whether the corresponding object is active using the specified key (default is is_active
) and value (default is True
).
Usage:
from rest_framework import serializers
from rest_framework_ext.validators import ActiveValidator
class MySerializer(serializers.ModelSerializer):
relation = serializers.PrimaryKeyRelatedField(queryset=Relation.objects.all(), validators=[ActiveValidator()])
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
Built Distribution
File details
Details for the file djangorestframework_ext-0.27.tar.gz
.
File metadata
- Download URL: djangorestframework_ext-0.27.tar.gz
- Upload date:
- Size: 7.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.11
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b736e0518a22cfb466544c03669cfcfe0230794b5fdc384b0d9212ede2d927aa |
|
MD5 | aec5cfd2682ca09d942598948417ef8d |
|
BLAKE2b-256 | 690aa1c493344a7262c2bf4317ad1e4b1bc003155aa9b479788606db3d0c6bbd |
File details
Details for the file djangorestframework_ext-0.27-py3-none-any.whl
.
File metadata
- Download URL: djangorestframework_ext-0.27-py3-none-any.whl
- Upload date:
- Size: 9.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.11
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 41bb3d4048b9b01faf8fa9d38122b7643f358f051ba4cda67ca4380d81647063 |
|
MD5 | e87a788aa0be07c25b2569158159f7a0 |
|
BLAKE2b-256 | ebdaa71291a0bf4d7596ceaef8d37899d5d244d9e987204e55275c332ec36366 |