Python FastAPI 框架入门(一)【用于后端API快捷开发】

news2024/11/25 14:55:41

在这里插入图片描述
FastAPI 框架,高性能,易于学习,高效编码,生产可用
官方中文文档:FastAPI 框架中文文档
官方介绍:

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。
关键特性:
快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。
高效编码:提高功能开发速度约 200% 至 300%。*
更少 bug:减少约 40% 的人为(开发者)导致错误。*
智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
简单:设计的易于使用和学习,阅读文档的时间更短。
简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
健壮:生产可用级别的代码。还有自动生成的交互式文档。
标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。

1、安装FastAPI

当然默认你有Python基础并已经安装 Python 3.6+了

  • 依赖
    Python 3.6 及更高版本
  • FastAPI 依赖 Starlette 和 Pydantic :
    Starlette 负责 web 部分。
    Pydantic 负责数据部分。

安装fastapi 和 ASGI 服务器(生产环境可以使用 Uvicorn 或者 Hypercorn)

$ pip install fastapi
$ pip install "uvicorn[standard]"

2、第一个示例

  • 创建一个 main.py 文件并写入以下内容:
from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}
  • 运行
$ uvicorn main:app --reload

在这里插入图片描述

  • 测试效果

使用浏览器访问 http://127.0.0.1:8000/
在这里插入图片描述
使用浏览器访问 http://127.0.0.1:8000/items/5?q=somequery
在这里插入图片描述

3、交互式 API 文档(测试API)

3.1 由 Swagger UI生成的(推荐)

访问 http://127.0.0.1:8000/docs
在这里插入图片描述

3.2 由 ReDoc 生成(可选的)

访问 http://127.0.0.1:8000/redoc
在这里插入图片描述

4、接受put请求

现在修改 main.py 文件来从 PUT 请求中接收请求体。
借助 Pydantic 来使用标准的 Python 类型声明请求体。

from typing import Union

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    price: float
    is_offer: Union[bool, None] = None


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}


@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    return {"item_name": item.name, "item_id": item_id}

服务器将会自动重载(因为在上面的步骤中你向 uvicorn 命令添加了 --reload 选项)。

  • 交互式 API 文档升级
    访问 http://127.0.0.1:8000/docs。
    交互式 API 文档将会自动更新,并加入新的请求体:
    在这里插入图片描述

5、错误提醒

比如请求http://127.0.0.1:8000/items/a?q=somequery

  • 有错误提醒
    在这里插入图片描述

6、总结

以上只是简单的了解Python的 FastAPI 框架,更多请课程官方文档:FastAPI 框架中文文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【GD32F427开发板试用】-05-GD32F427移植Coremark

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:申小林 如何在GD32F427开发板上移植CoreMARK? 1 下载CoreMARK源码 CoreMark开源的代码可以在Gitbub上自己做下载。 下载地址:ht…

CSS设置元素字体、降级使用字体、引入外部字体

设置元素字体 通过font-family属性,可以设置元素里面的字体样式。 font-family 可以把设置多个字体名称。 降级使用字体 几乎所有浏览器都有支持几种通用字体。比如: monospace,serif和sans-serif,当字体不可用,浏览器可以 “…

通过Docker启动Solace,并在Spring Boot通过JMS整合Solace

1 简介 Solace是一个强大的实时性的事件驱动消息队列。本文将介绍如何在Spring中使用,虽然代码使用的是Spring Boot,但并没有使用相关starter,跟Spring的整合一样,可通用。JMS是通过的消息处理框架,可以深入学习一下&…

02.指针的进阶1.练习题

1.辨析 //数组指针是一种指针,指向数组的指针 //数组指针是指向数组地址的指针 //回调函数是调用函数指针指向函数 EG1:杨氏矩阵 有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中…

微服务间通讯负载均衡以及日志

2.通信 HTTP ResthttpJSONRPC远程过程调用二进制 1.使用 RestTemplate RestTemplate restTemplate new RestTemplate(); String forObject restTemplate.getForObject("http://localhot:8888/user", String.class);其负载均衡有问题其无法实现健康检查 2.使用Ri…

新年新气象,跨境电商助推出口再创新高

受疫情等多方面影响,2022年纯棉纱进口量及产量均出现一定幅度地下滑。由于库存增加,消费量下降,供需矛盾也不断加剧。 新年新气象,2023年据预计纯棉纱产量将小幅回升,初步预计将达到535万吨,同比增加5.6%。…

Allegro如何快速打开和关闭层面操作指导

Allegro如何快速打开和关闭层面操作指导 在做PCB设计的时候,打开和关闭某个层面是非常频繁的操作,尤其是丝印等等层面。 Allgeo升级到了172版本的时候,可以将常用的层面添加到Visibility菜单里,就不需要频繁打开颜色管理器打卡和关闭层面了,如下图 具体操作如下 打开颜色…

归纳一下软件测试中「安全测试工具」

大家好啊,我是大田。今天归纳一下安全测试工具,分别用这些工具做哪些工作。自动化测试人员、功能测试人员平常可能用的不多,但是面试时也需要准备,需要知道安全测试工具有什么,还要关注现在有哪些漏洞。本篇先归纳整理…

vue3学习笔记之样式穿透(:deep)及CSS 新特性(:soltted、:gloabl、v-bind、mouldCSS)

文章目录1. scoped的原理2. :deep()3. :slotted()4. :global()5. 动态css(v-bind)6. css module1. scoped的原理 vue中的 scoped 通过在DOM结构以及css样式上加唯一不重复的标记:data-v-hash的方式,以保证唯一(而这个工作是由过P…

如何使用极狐GitLab 机器人大幅提升研发效率

本文来自: 黄松 极狐GitLab 后端工程师 研发效率对互联网/科技类公司来说至关重要,效率高意味着你能用更低的人力、时间成本在市场试错,成功的概率也会更大。 而说到研发效率的常见阻碍,主要有两点: 1. 研发流程中需要…

基础二分查找总结

前言 由于我在学习二分查找的过程中处于会了忘,忘了复习的状态,因此总结一套适合自己记忆的模板。建议先看参考资料[1,2,3]^{[1,2,3]}[1,2,3],理解二分查找各种细节的由来。 二分查找又死循环了?【基础算法精讲 04】手把手带你撕出…

9656教程总结

9656 世界机器人大会青少年电子信息智能创新大赛官网少儿编程办学经验介绍机器人体验展馆体系课程知乎加盟介绍 知识点汇总 年龄 4-6岁 韩纳机器人主题体验馆 赛事 WRC世界机器人大赛, NOC全国中小学信息技术创新和实践大赛 5岁前:乐高积木,孩子年龄小只需对科特、编程…

事关网站数据安全,你真的了解https与SSL证书之间的关系吗?

虽然根据网上的建站教程,大多数站长都知道要给域名添加一个SSL证书,以此来开启https进而可以获得更好的用户体验以及提高网站的安全性。但是SSL证书为什么能使得网站https?你真的去细究过两者之间的关系吗?本文就来说说https与SSL…

python模拟三颗恒星的运动

文章目录随机三体三星问题随机三体 目前来说我们并不关心真实的物理对象,而只想看一下三个随机的点放在三个随机的位置,赋予三个随机的速度,那么这三个点会怎么走。所以其初始化过程为 import numpy as np m,x,y,u,v [np.random.rand(3) f…

【java入门系列四】java基础-数组

学习记录🤔数组引出动态初始化数组内的数据会自动转换类型注意事项数组赋值机制数组拷贝数组扩容append?多维数组trick生成随机数Math.random()讨论总结谢谢点赞交流!(❁◡❁)更多代码: Gitee主页:https://gitee.com/G…

如何进行复盘

复盘定义 复盘,原本是围棋术语,指下完一盘棋后,双方棋手把对弈过程重新摆一遍,看哪里下得好,哪里下得不好,哪些关键节点有不同甚至更好的下法,以检查对局中招法的优劣与得失,并从中…

深入理解可变参数列表

目录 1.前言 2.基本使用方法 1.引入 2.相关宏介绍 3.原理剖析 1.传参 2.va_list 3.va_start() 4.va_arg() 5.va_end() 4.注意事项 5.总结 1.前言 在C语言中,对于一般的函数而言,参数列表都是固定的,而且各个参数之间用逗号进行分开。而除…

面试,演讲为什么一说话就紧张? 的底层解读

信息存在损耗在说话中,说话者与接受者之间传递信息存在损耗。而且人表达情绪不管是说话,还有肢体语言,这使得增加了信息接受者的信息量。下面引入两个词语来说明。给予与流露的含义给予:别人评价你做的菜好吃。流露:别人眉头一皱。…

探讨下如何更好的使用缓存 —— Redis缓存的特殊用法以及与本地缓存一起构建多级缓存的实现

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 通过前面的文章,我们一起剖析了Guava Cache、Caf…

如何在线录屏?怎么录制网课

当我们需要学习特定知识时,可以在网络上寻找教学视频进行学习。一般情况下,视频会一直保留在网上,可以随时随地观看。那您知道我们平常观看的网络课程是如何录制的吗?如何进行在线录屏?今天小编教您如何在线录制视频网…