Skip to content

Test PyPI version PyPI version PyPI version PyPI version Codecov Downloads

Django Ninja Extra

Django Ninja Extra package offers a class-based approach plus extra functionalities that will speed up your RESTful API development with Django Ninja

Key features:

All Django-Ninja features :

  • Easy: Designed to be easy to use and intuitive.
  • FAST execution: Very high performance thanks to Pydantic and async support.
  • Fast to code: Type hints and automatic docs lets you focus only on business logic.
  • Standards-based: Based on the open standards for APIs: OpenAPI (previously known as Swagger) and JSON Schema.
  • Django friendly: (obviously) has good integration with the Django core and ORM.

Plus Extra:

  • Class Based: Design your APIs in a class based fashion.
  • Permissions: Protect endpoint(s) at ease with defined permissions and authorizations at route level or controller level.
  • Dependency Injection: Controller classes supports dependency injection with python Injector or django_injector. Giving you the ability to inject API dependable services to APIController class and utilizing them where needed


  • Python >= 3.6
  • django >= 2.1
  • pydantic >= 1.6
  • Django-Ninja >= 0.16.1

Full documentation, visit.

Sample Project

Django-Ninja-Tutorial Project, visit


pip install django-ninja-extra
After installation, add ninja_extra to your INSTALLED_APPS



In your django project next to create new file:

from ninja_extra import NinjaExtraAPI, api_controller, http_get

api = NinjaExtraAPI()

# function based definition
@api.get("/add", tags=['Math'])
def add(request, a: int, b: int):
    return {"result": a + b}

#class based definition
@api_controller('/', tags=['Math'], permissions=[])
class MathAPI:

    def subtract(self, a: int, b: int):
        """Subtracts a from b"""
        return {"result": a - b}

    def divide(self, a: int, b: int):
        """Divides a by b"""
        return {"result": a / b}

    def multiple(self, a: int, b: int):
        """Multiples a with b"""
        return {"result": a * b}


Now go to and add the following:

from django.urls import path
from .api import api

urlpatterns = [
    path("api/", api.urls),  # <---------- !

Interactive API docs

Now go to

You will see the automatic interactive API documentation (provided by Swagger UI):

Swagger UI