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 dont want to do full system rewrite from Django to FastAPI
- Or dont want to upgrade from Python2 to Python3
Tell me what is working
- Auto OpenAPI document generation from Python function parameter
- Auto Schema Validation from Python function parameters
Installation
pip install django-openapi
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.
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.4-py2-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 654e518f6bef4300c5418ab77cada0a7ee49075452734bc2a00f09dbf8515118 |
|
MD5 | b6e24509f0200165d460c4279736481a |
|
BLAKE2b-256 | eacd771da74a3c2bb93639280c0ec1750d300a0871f470ddf98d296b19dc5415 |