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
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.
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
fromdjango_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.
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | d64f2dc7cf9b5dad7833e87beb2adfe4037320b2fd5dc839edfd91fa5692941d |
|
MD5 | 50f4983014b3ee30bb97ba39af280624 |
|
BLAKE2b-256 | 3e10de2b06156083d22a531e602d9b9508ebaa7019baea5a71a1c5246791ce4f |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0cac019e352b139a0a3a2398437f0a962b367a3cae695cc9c54d24c9eb57506e |
|
MD5 | 5fd85aed30bacc49a6ede5f9210aa106 |
|
BLAKE2b-256 | 69d072af2498fddccf8fe9a2c9a8c7885dad99e77da72cb007696300322c5497 |