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有没有办法使多个对象初始化更紧凑?   java确保BUnit包和测试包不包含在生产代码中   java如何使JTextField更小,而不是填满整个空间?   javaawt的矩形交点   用户连续登录应用程序的java条纹(Android)   maven如何在服务器上运行java项目,并将其作为jar添加到EAR项目中   java如何在jar/war的资源文件夹中创建png?   swing在Java中未选择列表项时禁用按钮   java GridView x BaseAdapter并在onItemClick中重新加载   java Apache POI未应用某些颜色索引   java创建URL使用uri有什么区别。解析/uri。生成器/连接字符串?   java JavaFX jfoenix运行时错误(JFXDatePicker)   右旋转二叉搜索树   在Java标准版中运行Java移动应用程序   java为什么要为每个实例创建静态hashmap?   java如何使用RTC唤醒和报警意图   java获取对象中的JSON表达式   (Java)服务器不接受多个连接   java为什么我的目的地为null?   java使用多个参数执行存储过程,并使用spring数据jpa将结果集映射到非实体类