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启动一个免费的实时演示服务器

Gitpod ready-to-code

如果按钮不显示,您也可以直接使用下面的链接

https://gitpod.io/#https://github.com/tokikanno/django-openapi

Gitpod启动后,如果您看到这样的对话框,只需点击Open Browser按钮,您将进入QuickIntro live演示服务器。在

image

使用cmd+p来搜索macu的源代码。在

快速入门

在你的Django项目中

  • django_openapi导入OpenAPI
  • 创建API对象实例
  • 将API对象添加到urlpatterns中
^{pr2}$
  • 启动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。在

image

浏览到demo folder以获取更高级的示例。在

托多

  • 更多文档和示例
  • 更好的架构验证错误消息处理
  • 更高级的字段类型(例如:EmailStringField、CommaSeparatedArrayField…)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用MVC设计模式观察嵌套对象   java将多个客户端连接到服务器   合并Java Web应用程序   Spring Security中未捕获java AuthenticationSuccessEvent   java Firebase JSON到Arraylist内部的Arraylist,存在对象问题   在Java15的sealedclasses特性中,final类和非密封类之间有什么区别?   java我可以使用数组。copyOf制作二维数组的防御副本?   java球不会在屏幕上移动   Java类如何在同一个文件中包含两个类?   java使用“Character.isWhiteSpace”删除所有空白   java阻止在RealmList中保存时创建领域对象   如何仅在ConnectionFactory上使用Java JMS身份验证   spring可以强制java对象在运行时实现接口吗?   socket无法在JAVA中使用TCP启用双工模式通信