Skip to main content

A minimal FastAPI implementation in python2 + Django without pydantic

Project description

django-openapi

A minimal FastAPI implementation in Python2 + Django without pydantic

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 FastAPI needs Python3 to run, some legacy projects I maintained are still using Python2 and built by Django framework. It would take 2 migration steps (Python 2 to 3 and Django to FastAPI) for moving them onto FastAPI framework.

So I decided to build a minimal FastAPI implementation in Python2 + Django, that I could instantly get the benefits from FastAPI without too many migrations on my legacy projects.

Who should use this?

People who like the way FastAPI works but

  • Are still on the long migration process from Python2 to Python3
  • Or don't want to do full system rewrite from Django to FastAPI
  • Or don't want to upgrade from Python2 to Python3

Features

  • Auto OpenAPI schema/document generation from Python function parameter
  • Auto HTTP request parameter validation from Python function parameters
  • Python 2/3 compatiable, you could use almost the same code for you Python2/3 projects

Installation

pip install django-openapi

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-openapi

After Gitpod launched, if you see a dialog like this, just hit the Open Browser button then you will get to the quick intro live demo server.

image

Use ctrl + p (or cmd + p if u're using MacOS X) and search for intro.py to see the source code of intro demo server.

Quick start

In your Django project

  • Import OpenAPI from django_openapi
  • Create an API object instance
  • Add API object into urlpatterns
# import OpenAPI from django_opeanapi
from django_openapi import OpenAPI

# create an API object instance
api = OpenAPI(title='My OpenAPI Test',	prefix_path='/test_api')

urlpatterns = [
    api.as_django_url_pattern()  # Add API object into urlpatterns
]
  • Start you django debug server and open your browser with url like http://localhost:8000/test_api/_docs, this is the auto document page.
  • Now let's try adding some basic routes for you API
from django_openapi import Path, Query, Form

@api.get('/test/hello_via_path/{word}', tags=['test'])
def hello_via_path(word=Path()):
    return {'hello': word}


@api.get('/test/hello_via_query', tags=['test'])
def hello_via_query(word=Query()):
    return {'hello': word}


@api.post('/test/hello_via_form', tags=['test'])
def hello_via_form(word=Form()):
    return {'hello': word}
  • Reload your browser & see if anything changed to the auto document page
  • Advanced routes via JSON body & JSON schema object
from django_openapi import Body
from django_openapi.schema import BaseModel, StringField

class HelloPayload(BaseModel):
    word = StringField(default_value='world', min_length=3)

@api.post('/test/hello_via_json_body', tags=['test'])
def hello_via_json_body(payload=Body(HelloPayload)):
    return {'hello': payload.word}
  • Reload agagin, the auto document page now should have 4 APIs on it.

image

Browse to the demo folder for more advanced samples.

TODO

  • More documents and samples
  • Better schema validation error message handling
  • More advanced field types (e.g.: EmailStringField, CommaSeparatedArrayField ...)

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-openapi-0.1.1.11.tar.gz (15.2 kB view details)

Uploaded Source

Built Distribution

django_openapi-0.1.1.11-py3-none-any.whl (20.4 kB view details)

Uploaded Python 3

File details

Details for the file django-openapi-0.1.1.11.tar.gz.

File metadata

  • Download URL: django-openapi-0.1.1.11.tar.gz
  • Upload date:
  • Size: 15.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.1

File hashes

Hashes for django-openapi-0.1.1.11.tar.gz
Algorithm Hash digest
SHA256 d64f2dc7cf9b5dad7833e87beb2adfe4037320b2fd5dc839edfd91fa5692941d
MD5 50f4983014b3ee30bb97ba39af280624
BLAKE2b-256 3e10de2b06156083d22a531e602d9b9508ebaa7019baea5a71a1c5246791ce4f

See more details on using hashes here.

File details

Details for the file django_openapi-0.1.1.11-py3-none-any.whl.

File metadata

  • Download URL: django_openapi-0.1.1.11-py3-none-any.whl
  • Upload date:
  • Size: 20.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.1

File hashes

Hashes for django_openapi-0.1.1.11-py3-none-any.whl
Algorithm Hash digest
SHA256 0cac019e352b139a0a3a2398437f0a962b367a3cae695cc9c54d24c9eb57506e
MD5 5fd85aed30bacc49a6ede5f9210aa106
BLAKE2b-256 69d072af2498fddccf8fe9a2c9a8c7885dad99e77da72cb007696300322c5497

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