Skip to main content

Minimal FastAPI implementation for Django

Project description

Caution!!!

This is a minimal FastAPI port for Django, not all of FastAPI functionalities are supported.

Please see Features currently work and Features currently not work sections to evaluate if all the functionalities you need are ported.

Also, bug reports / Fix PRs are welcomed.

Installation

pip install django-mini-fastapi

Live demo provided by Gitpod

Click the button below and launch a free live demo server via Gitpod

Gitpod ready-to-code

If the button doesn't show up, you clould also use below link directly

https://gitpod.io/#https://github.com/tokikanno/django-mini-fastapi

After Gitpod launched, wait a while for the auto execution of make intro command Then you could using VScode remote explorer for opening the intro demo server in your browser.

image

What is django-mini-fastapi ?

A minimal FastAPI implementation for Django !

This project reused more than 95% codes from FastAPI. I just did minimal necessary modifications for making it working under Django.

So basicly you can read documents from FastAPI for knowing how to use this module. (Except features metioned in Features currently not work section) The major difference between django-mini-fastapi and FastAPI is how you import and mount it.

# This is how you declear OpenAPI endpoint in FastAPI
from typing import Optional

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}

Above is the quick start sample in FastAPI document, which should be re-written like below

# This is how you do the same thing in django-mini-fastapi
from typing import Optional
from django_mini_fastapi import OpenAPI

app = OpenAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}

And you should mount the API endpoint via Django url pattern mechanism by calling app.as_django_url_pattern()

urlpatterns = [
    # use as_django_url_pattern() for mounting API endpoint into Django url parser
    app.as_django_url_pattern(),
]

And usually you won't want to mount API endpoint in / for a Django project. You could pass the root_path parameter to OpenAPI init function for changing the mount point.

app = OpenAPI(root_path='/api')

For fully working example script, please see demo/intro.py

You can also type

make intro

for starting test intro server.

Why do you make this? Can't you just use FastAPI directly?

I'm a big fan of FastAPI. It's elegant and saves lots of doc maintaince & API spec communication costs for me.

But I'm maintaing huge legacy projects built by Django framework. It will take massive resources for porting it onto FastAPI.

So I decided to modifiy FastAPI for making it working under Django, then I could instantly get the benefits from FastAPI without doing migrations for my legacy projects.

Who should use this?

People who like the way FastAPI works but don't want to do full system rewrite from Django to FastAPI

Features currently work

  • Auto OpenAPI schema/document generation from Python function declaration
  • Auto request parameter validation
  • Dependencies system
  • Authentication (Security dependencies)

Features currently not work

  • Auto OpenAPI parameters parsing & processing
    • Callback function delcearation (WIP)
    • Security dependencies (Evaluating/Planning) (done)
  • WebSocket endpoints (Not in priority)
  • Backgournd tasks (Not in priority, we still use celery even using the real FastAPI. Background task execution function in FastAPI isn't very suitable for serious tasks.)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-mini-fastapi-0.1.12.tar.gz (58.6 kB view details)

Uploaded Source

Built Distribution

django_mini_fastapi-0.1.12-py3-none-any.whl (52.3 kB view details)

Uploaded Python 3

File details

Details for the file django-mini-fastapi-0.1.12.tar.gz.

File metadata

  • Download URL: django-mini-fastapi-0.1.12.tar.gz
  • Upload date:
  • Size: 58.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.28.1

File hashes

Hashes for django-mini-fastapi-0.1.12.tar.gz
Algorithm Hash digest
SHA256 50ca05634fcba1f0e07697e2e009001f90edd974d4df236d2d145dce0e4aaaa3
MD5 5a092b7e305ca45fc29e12ff077077de
BLAKE2b-256 d816b7ec7d53cabcb871c22b47410b1b6c2f401bda2d3cd37eeecf3ede713ab9

See more details on using hashes here.

File details

Details for the file django_mini_fastapi-0.1.12-py3-none-any.whl.

File metadata

File hashes

Hashes for django_mini_fastapi-0.1.12-py3-none-any.whl
Algorithm Hash digest
SHA256 c2a202c13f63a629ddded86845eb38ef66e4f14f61cab9db280ba8e450dc6b2f
MD5 bb02c278d95139e44476dd2d0b291d1d
BLAKE2b-256 5f0f01c9f4fc8323d770ad365b7ebf12695825348fb975a4ddc41881f7cf1a41

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page