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 hashes)

Uploaded Source

Built Distribution

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

Uploaded Python 3

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