Fast DRF

Fast DRF is a small library for making API faster with Django and Django REST Framework. It's easy and configurable.
Full Documentation here
Change Log is here
Features
- Runtime API creation without writing View, Serializer, Url, etc
- API versioning by default.
- Control fields on each versions
- An enhanced filtering support align with Django query filter.
- Customizable API URL and API Prefix.
- Options for Overriding Viewset, Serializer, Queryset
- Query optimization enabled for API with Django's
prefetch_relatedandselect_related - Full control over project during making automated API. i.e: you can select an Django app to enable for making API.
Quick Start
- Install the library inside your virtualenv by using pip
pip install fast-drf - Add 'rest_framework' to
INSTALLED_APPS - Add fast_drf.router.BasicRouter.get_urls() to the
urlpatternsinurls.py, e.g.
from django.contrib import admin
from django.urls import path
from fast_drf.router import BasicRouter
urlpatterns = [
path('admin/', admin.site.urls),
] + BasicRouter.get_urls()
- Add config for Fast DRF like following,
FAST_DRF_CONFIG = {
'DEFAULT_APPLIED_APPS': (
'example_app', 'another_app'
)
}
- Update your every model or if you use base abstract model then it's good and less time you need. Update model like following,
Overriding the
expose_apiclassmethod is not necessary anymore. If you just inherit theExposeApiModelMixinmixin class then your app will be detect a api url accordingly.
from fast_drf.mixins.expose_api_model_mixin import ExposeApiModelMixin
from django.db import models
class MyModel(ExposeApiModelMixin, models.Model):
#... All yor fields
pass
# The following methods are available from model mixin
@classmethod
def exposed_api(cls, *args, **kwargs):
"""
This method holds a bunch of API configs and return like following...
{
"api_url": "", # (NOT REQUIRED)
# You must use from HTTPVerbsEnum. Like HTTPVerbsEnum.GET.value, HTTPVerbsEnum.POST.value
"allowed_methods": ['get', 'post', 'put', 'patch', 'delete'], # (NOT REQUIRED)
# slug_field is application 'put', 'patch', 'delete' these methods
"slug_field": "pk", # (NOT REQUIRED) DEFAULT [PK] (Must be model field, unique or primary key)
"queryset": "", # (NOT REQUIRED) default all
"viewset_class": "", # (NOT REQUIRED) BaseViewset class
"serializer_class": "", # (NOT REQUIRED) default BaseEntitySerializer
"permission_classes": "", # (NOT REQUIRED) default set from settings
}
:param args:
:param kwargs:
:return: An empty Dictionary/False OR Full config dictionary.
"""
api_configs = {
"api_url": 'my-model-api',
}
return api_configs
Enable multiple API version
To achieve this awesomeness rewrite the following method in your model
@classmethod
def api_version_fields(cls, **kwargs):
"""
*** DEFAULT VERSION `v1` ***
This method will return a dictionary object with version number and fields name. Fields are similar like
serializer fields. Or you can say exactly as same as serializer fields.
:param kwargs: Currently nothing to receive on kwargs
:return: a dictionary object with version number
"""
versions = {
'v1': ['id', 'name', 'custom_1', 'custom_2'],
'v2': ['id', 'name', 'something_else']
}
return versions
Append a slash at the end of of API
Set APPEND_SLASH = True at your settings.py
API Prefix Change
Set you API prefix as your own like following.
FAST_DRF_CONFIG = {
# ...
'DEFAULT_API_PREFIX': 'rest-api' # Default 'api'
# ...
}
Your API will look like, /rest-api/v1/users/
That's it. You can also override serializer class and viewset class
Metadata
Release files for fast-drf 2.2.12
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fast_drf-2.2.12.tar.gz | 14.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fast_drf-2.2.12-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 36.4 kB
Release files / fast_drf-2.2.12.tar.gz
| Download URL | fast_drf-2.2.12.tar.gz |
|---|---|
| Size | 14.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c934c670988cb9f9754eabb981028b2994f6e7841607e4b5ef4953e314c5b1a5
|
|
BLAKE2b-256 checksum How to use checksums |
62d94ef177d60852455fecf545e7eb94d00754605c25cc6b2034319921a0bc07
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.6.1 CPython/3.11.5 Darwin/23.1.0
|
Release files / fast_drf-2.2.12-py3-none-any.whl
| Download URL | fast_drf-2.2.12-py3-none-any.whl |
|---|---|
| Size | 21.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1f52b27c6b26d27236a0224ab3710f655d1f112a3cc61e95c5f04bd2ac296ae8
|
|
BLAKE2b-256 checksum How to use checksums |
3d8cf09fd19b35f277ae96307847132bb09056b6c5be8fad64c7dd6ef6289bd7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.6.1 CPython/3.11.5 Darwin/23.1.0
|