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
Hashes for django_openapi-0.1.1.11-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0cac019e352b139a0a3a2398437f0a962b367a3cae695cc9c54d24c9eb57506e |
|
MD5 | 5fd85aed30bacc49a6ede5f9210aa106 |
|
BLAKE2b-256 | 69d072af2498fddccf8fe9a2c9a8c7885dad99e77da72cb007696300322c5497 |