python 测试开发请关注这个新框架

本贴最后更新于 1522 天前,其中的信息可能已经时移俗易

如果你之前有接触 python 测试开发,那你应该会听过 django 或者 flask。 但是最近一个新的框架出现在人们的视野中,短短 1 年在 GitHub 上就收集了 20000+ star, 成为一个不折不扣的明星项目。

image.png

这个项目是由塞巴斯蒂安·拉米雷斯(Sebastian Ramírez)创建的,他在实现一个机器学习项目的时候创建了这个框架,并且优化至今。拉米雷斯留着达利那样的胡子,看起来像一个艺术家。

image.png

这个框架有什么高级特性让他在这么短时间内可以追赶 django 和 flask 呢?

自动文档

FastAPI 内置 2 种文档:swaggerui 和 Redoc, 当你编写好接口以后,可以直接查看文档,甚至可以进行简单的测试。这些都是由FastAPI自动打包的。允许您将更多精力放在代码上,而不是设置工具。

image.png

类型声明

一直以来,python 的类型传递都是被诟病的,在 python3.6 以后,类型声明已经比较完善,而 Pydantic 这个库基于 python 的标准语法进行类型检查。 FastAPI 集成了 pydantic 这个优秀的库进行数据检验, 让你用更少的代码方便的进行数据检验。

而且加了类型声明以后,你能更方便的在 pycharm 这样的工具当中得到代码智能提示,这点比 Flask 好太多了。

image.png

数据检验

由于集成了 Pydantic。您可以验证任意的 python 标准类型,也可以验证其他的数据,比如:

身份认证

这是任何API的关键部分,现代社会几乎任何的产品和服务都需要你登录。FastAPI 把标准的身份认证集成到了框架内部。它提供

性能

这恐怕是 FastAPI 最值得炫耀的地方。它太快了!不仅编码速度快,而且处理请求的速度也非常快!你可以在 techempower 查询到最新的性能表现对弈。

image.png

天生支持异步

使用 FastAPI 你可以写同步代码,但是如果你需要一些异步操作,你可以非常轻松的完成切换。最简单的,你可以直接在函数前面加一个 async, 这个在 Flask 当中是不能做的, 在 django 中也并不容易。


@app.post('/user')

async def user(req: Request):

    user = await req.form()

    return pages.TemplateResponse(

        'user.html',

        {'request': req, 'uid': user.get('username', '')}

    )

强大的依赖注入系统(Dependcy Injection)

FastAPI 的依赖注入非常炫酷,他允许你通过非常简单的方式去解决一些依赖问题,不需要多余的配置。比如如果你想在处理请求时操作数据库,你可以把数据库操作注入:


@app.post("/articles/{article_id}/comments")

def post_comment(article_id: int, comment: Comment, database = Depends(get_database)):

    # database 数据库操作

    return {"msg": "comment posted!"}


GraphQL 和 WebSocket 支持

GraphQL 在使用复杂的数据模型时比 REST 有用多了。当前端的微小变化需要后端的查询数据时表象非常亮眼。Flask 和 Django 可以安装插件处理,在 FastAPI 中,这是经过集成的。FastAPI 同样支持 WebSocket

总结

FastAPI 是你在进行 python web 开发的时候不容错过的一个框架。以前的 web 框架设计之初都是开发网站的,所以通常带有 HTML 模板渲染,而 FastAPI 专心给你提供 API, 如果你像让他返回 HTML, 也可以轻松引入模板引擎。

  • Python
    105 引用 • 237 回帖 • 2 关注
回帖
请输入回帖内容 ...