Skip to main content

Simple Django Rest Framework - sdrf

Simple Django Rest Framework (sdrf) is django based app used to provide abstraction that combines both django rest framework with drf_yasg a swagger generator to implement good looking and well documented apis using djang

Quick Start

Install

  1. assuming you already have a django project that you need to add this app to you need to start with installing the package using
pip install sdrf
  1. install required apps to INSTALLED_APPS in django settings
INSTALLED_APPS = [
    ...
    "rest_framework",
    "drf_yasg",
    'sdrf',
]
  1. add swagger docs url to your project urls
from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    ...
    path('',include('sdrf.urls'))
]
  1. check out if everything is okay by visting default swagger docs url at http://<your-project-url>/rest Empty Swagger UI example

Configure

now you have an rest app up and running you can configure it as you want. addtionally for django rest framework configuration and drf_yasg configuration you have our sdrf configs you can make with these default values

config variable name default value description
REST_APP_NAME Weather API the app name used in swagger docs view
REST_APP_VERSION v1 the api version used in swagger docs view
REST_APP_CREATOR {'name': '','email': '','url': ''} the contact information for communicating the rest app creator used in swagger docs view
REST_APP_BASE_URL rest/ the base url that the swagger docs will be viewd on and a prefix for default api endpoint

Usage

Build Single Method API Endpoints

  1. assuming you have an django app that already exsist create and an API endpoint class that inheiret APIEndPoint class for example see out hello world here
from sdrf.api_endpoint import APIEndpoint
from sdrf.endpoint_config import APIEndpointConfig


class HelloEndPoint(APIEndpoint):
    def configure(self, config: APIEndpointConfig) -> APIEndpointConfig:
        ...
        return config

    @staticmethod
    def execute(request: Request, *args, **kwargs) -> Response:
        name = request.query_params.get('name')
        return HttpResponse(f'Hello {name}')
  1. configure your api endpoint using configure method, in this method you have all sort of configuration that you can configure for your rest api even the auhentication and authorization configurations, http method, routing, and swagger view configs simplified with easy and nice looking config code
from sdrf.api_endpoint import APIEndpoint
from sdrf.endpoint_config import APIEndpointConfig


class HelloEndPoint(APIEndpoint):
    def configure(self, config: APIEndpointConfig) -> APIEndpointConfig:
        config.name = 'Hello Rest!'
        config.description= """
        First Well documented API endpoint that says hello to name that you send
        """
        config.endpoint= 'hello'
        config.http_method = 'GET'
        config.set_response(200,'hello [name]')
        config.add_parameter('name',self.DataType.STRING,self.ParameterTypes.QUERY_PARAM)
        config.add_tag('First API')
        return config

    @staticmethod
    def execute(request: Request, *args, **kwargs) -> Response:
        name = request.query_params.get('name')
        return HttpResponse(f'Hello {name}')
  1. finally add your api endpoint to your app urls using as_url static method
from .views import HelloEndPoint

urlpatterns = [
    HelloEndPoint.as_url()
]
  1. check your output and test your api in the swagger view

An example of swagger output of APIEndPoint

Build Model API EndPoint

just like you would do in normal django rest framework and make ViewSet you dont need to learn anything new to that but instead of inherting rest_framework.viewsets.ModelViewSetyou will inherit ourModelEndPoint`like that

from .models import Person,PersonSeralizer
from sdrf.model_endpoint import ModelEndPoint
...
class PersonEndPoint(ModelEndPoint):
    queryset = Person.objects.all()
    serializer_class = PersonSeralizer

then simply make it as urls in urls.py

from .views import PersonEndPoint

urlpatterns = [
    ...
    PersonEndPoint.as_urls(),
]

Model EndPoint Swagger output

Metadata

Release files for sdrf 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sdrf 0.1.1
File Size Uploaded
sdrf-0.1.1.tar.gz 8.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sdrf 0.1.1
File Interpreter ABI Platform
sdrf-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 17.8 kB

Release files / sdrf-0.1.1.tar.gz

Download URL sdrf-0.1.1.tar.gz
Size 8.7 kB
Tags Source
SHA-256 checksum
How to use checksums
2765c71636201e517ef99340085a43b50e26b239b666b10a219af9c9cbb816be
BLAKE2b-256 checksum
How to use checksums
2a68762b58ce23737fbed2da50f41214f6a5c84478c1510c3a7a1a9192f0cf0b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.17

Release files / sdrf-0.1.1-py3-none-any.whl

Download URL sdrf-0.1.1-py3-none-any.whl
Size 9.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
802557b7eefd4341e40f5eb97bb7b43b15f921a25e41aff2a2c8c0dfc91065b8
BLAKE2b-256 checksum
How to use checksums
12182442b3a21e6b4d425c46427ad9e5d7a5e846ba4ad5871a13c4e46b3f46a0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.17

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

1 release file

0.0.6

1 release file

0.0.5

1 release file

0.0.4

1 release file

0.0.3

1 release file

0.0.2

1 release file

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page