python2+Django中不带pydantic的最小FastAPI实现
django-openapi的Python项目详细描述
django openapi
Python2+Django中不带pydantic的最小FastAPI实现
你为什么要做这个?你不能直接使用FastAPI吗?在
我是FastAPI的超级粉丝。它很优雅,为我节省了大量的文档维护和API规范通信成本。在
但是FastAPI需要Python3来运行,我维护的一些遗留项目仍然使用Python2并由Django框架构建。它需要两个迁移步骤(python2到3和Django到FastAPI)才能将它们迁移到FastAPI框架上。在
所以我决定用Python2+Django构建一个最小的FastAPI实现,这样我就可以立即从FastAPI中获得好处,而不需要对我的遗留项目进行太多的迁移。在
谁应该用这个?在
喜欢FastAPI工作方式的人
- 仍然在从Python到Python3的漫长迁徙过程中
- 或者不想从Django重写到FastAPI
- 或者不想从Python2升级到Python3
特点
- 从Python函数参数自动生成OpenAPI模式/文档
- 从Python函数参数自动验证HTTP请求参数
- Python2/3兼容,您可以为Python2/3项目使用几乎相同的代码
安装
pip install django-openapi
Gitpod提供的现场演示
点击下面的按钮,通过Gitpod启动一个免费的实时演示服务器
如果按钮不显示,您也可以直接使用下面的链接
https://gitpod.io/#https://github.com/tokikanno/django-openapi
Gitpod启动后,如果您看到这样的对话框,只需点击Open Browser
按钮,您将进入QuickIntro live演示服务器。在
使用cmd+p来搜索macu的源代码。在
快速入门
在你的Django项目中
- 从
django_openapi
导入OpenAPI
- 创建API对象实例
- 将API对象添加到urlpatterns中
- 启动django调试服务器,用类似于
http://localhost:8000/test_api/_docs
的url打开浏览器,这是自动文档页面。在 - 现在让我们尝试为API添加一些基本的路由
fromdjango_openapiimportPath,Query,Form@api.get('/test/hello_via_path/{word}',tags=['test'])defhello_via_path(word=Path()):return{'hello':word}@api.get('/test/hello_via_query',tags=['test'])defhello_via_query(word=Query()):return{'hello':word}@api.post('/test/hello_via_form',tags=['test'])defhello_via_form(word=Form()):return{'hello':word}
- 重新加载浏览器,并查看自动文档页面是否有任何更改
- 通过JSON body和JSON schema对象的高级路由
fromdjango_openapiimportBodyfromdjango_openapi.schemaimportBaseModel,StringFieldclassHelloPayload(BaseModel):word=StringField(default_value='world',min_length=3)@api.post('/test/hello_via_json_body',tags=['test'])defhello_via_json_body(payload=Body(HelloPayload)):return{'hello':payload.word}
- 重新加载agagin,自动文档页面现在应该有4个api。在
浏览到demo folder以获取更高级的示例。在
托多
- 更多文档和示例
- 更好的架构验证错误消息处理
- 更高级的字段类型(例如:EmailStringField、CommaSeparatedArrayField…)
- 项目
标签: