FastAPI 初体验,效率杠杠滴

目录

前言:

1、官网信息

2、环境安装

3、写个demo 

 4、关注的几个技术点

4.1 路径参数数据接收

4.2 查询参数数据接收

4.3 post 数据接收

4.4 header数据接收

4.5 cookie数据接收

5、总结

5.1 没有使用门槛

5.2 开发效率

5.3 劣势


前言:

写Java好久了,给自己定个小目标,下个项目使用Python做web开发,主要原因是我们的项目用户量不大,而且QPS低,所以可以在不同的业务方案切换,同时体验下Python的开发效率。

在之前的工作中使用过Django,也了解过Flask,不过在其他项目中看到同事使用FastAPI ,今天就体验下,下次直接用在项目中。

1、官网信息

官方文档:FastAPI

文档: https://fastapi.tiangolo.com

源码: GitHub - tiangolo/fastapi: FastAPI framework, high performance, easy to learn, fast to code, ready for production


FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。

关键特性:

  • 快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。

  • 高效编码:提高功能开发速度约 200% 至 300%。*

  • 更少 bug:减少约 40% 的人为(开发者)导致错误。*
  • 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
  • 简单:设计的易于使用和学习,阅读文档的时间更短。
  • 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
  • 健壮:生产可用级别的代码。还有自动生成的交互式文档。
  • 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。

2、环境安装

pip install fastapi -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install "uvicorn[standard]" -i https://pypi.tuna.tsinghua.edu.cn/simple

直接使用官方的命令,总是timeout,所以直接切换到国内的源,

安装其他的包 也可以用这个方式哦

3、写个demo 

我使用的Python是3.8,pycharm社区版。

直接创建一个Python项目就行,然后执行上一步的安装包

拷贝下面的代码到main.py

from typing import Union
from fastapi import Header, FastAPI
from fastapi import FastAPI
import uvicorn# 类似于 app = Flask(__name__)
app = FastAPI()# 绑定路由和视图函数
@app.get("/")
async def index():return {"name": "香菜"}
# 绑定路由和视图函数
@app.get("/testcookie")
async def index(token: Union[str, None] = Header(default=None)):return {"name": token}# 在 Windows 中必须加上 if __name__ == "__main__"
# 否则会抛出 RuntimeError: This event loop is already running
if __name__ == "__main__":# 启动服务,因为我们这个文件叫做 main.py# 所以需要启动 main.py 里面的 app# 第一个参数 "main:app" 就表示这个含义# 然后是 host 和 port 表示监听的 ip 和端口uvicorn.run("main:app", host="0.0.0.0", port=5555)

运行之后

 4、关注的几个技术点

4.1 路径参数数据接收

这个还是挺简单的

from fastapi import FastAPIapp = FastAPI()@app.get("/items/{item_id}")
async def read_item(item_id):return {"item_id": item_id}

4.2 查询参数数据接收

声明不属于路径参数的其他函数参数时,它们将被自动解释为"查询字符串"参数

from fastapi import FastAPIapp = FastAPI()fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]@app.get("/items/")
async def read_item(skip: int = 0, limit: int = 10):return fake_items_db[skip : skip + limit]

查询字符串是键值对的集合,这些键值对位于 URL 的  之后,并以 & 符号分隔。

例如,在以下 url 中:

http://127.0.0.1:8000/items/?skip=0&limit=10

...查询参数为:

  • skip:对应的值为 0
  • limit:对应的值为 10

由于它们是 URL 的一部分,因此它们的"原始值"是字符串。

4.3 post 数据接收

定义数据模型,当一个模型属性具有默认值时,它不是必需的。否则它是一个必需属性。将默认值设为 None 可使其成为可选属性。

from typing import Unionfrom fastapi import FastAPI
from pydantic import BaseModelclass Item(BaseModel):name: strdescription: Union[str, None] = Noneprice: floattax: Union[float, None] = Noneapp = FastAPI()@app.post("/items/")
async def create_item(item: Item):return item

4.4 header数据接收

from typing import Unionfrom fastapi import FastAPI, Headerapp = FastAPI()@app.get("/items/")
async def read_items(user_agent: Union[str, None] = Header(default=None)):return {"User-Agent": user_agent}

4.5 cookie数据接收

from typing import Unionfrom fastapi import Cookie, FastAPIapp = FastAPI()@app.get("/items/")
async def read_items(ads_id: Union[str, None] = Cookie(default=None)):return {"ads_id": ads_id}

5、总结

5.1 没有使用门槛

fastAPI 对于我来说并没有太多的新鲜感,大部分的使用方式也和Springboot很像,没什么新鲜感,带来的好处就是没有使用门槛。

5.2 开发效率

可能对于我来说还真没有多少提升,但是还是想试一试

5.3 劣势

看到fastAPI使用了Pydantic 模型来声明请求体,并能够获得它们所具有的所有能力和优点。

这个需要学习,也不知道会有多少学习成本,不熟。


本书内容系统、全面,案例丰富,讲解浅显易懂,既适合Python零基础入门读者学习,也适合作为广大中职、高职院校相关专业的教材用书。

京东购买链接:https://item.jd.com/13951968.html

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue简单使用及整合elementui

创建vue工程 在vue工程目录下npm install vue 下载离线vue https://v2.vuejs.org/v2/guide/installation.html 引入工程中 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" c…

C# 参数传递(引用类型参数)

目录 一&#xff0c;引言 二&#xff0c;引用类型参数作为值参数传递 三&#xff0c;引用类型参数作为引用参数传递 一&#xff0c;引言 方法中参数的传递方式主要有值参数传递和引用参数传递&#xff08;ref&#xff0c;out&#xff09;&#xff0c;而参数有可以分为值类型…

构造稀疏矩阵例子

构造稀疏矩阵的目的是在处理具有大量零元素的大规模数据时&#xff0c;节省内存空间和计算资源&#xff0c;并提高计算效率。稀疏矩阵是一种特殊的矩阵&#xff0c;其中包含许多零元素和一些非零元素。 #include "pcl.h" #include "common.h" #include &qu…

设计模式——责任链模式

责任链模式 定义 使多个对象都有机会处理请求&#xff0c;从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;知道有对象处理它为止。 优缺点 优点 能将请求和处理分开。请求者可以不用知道是谁处理的&a…

Java设计模式之结构型-代理模式(UML类图+案例分析)

目录 一、基础概念 二、UML类图 1、静态代理类图 2、动态代理类图 三、角色设计 四、案例分析 1、静态代理 2、JDK动态代理 3、Cglib动态代理 五、总结 一、基础概念 代理模式是一种结构型设计模式&#xff0c;它用一个代理对象来封装一个目标对象&#xff0c;通常…

Python+docx实现python对word文档的编辑

前言&#xff1a; 该模块可以通过python代码来对word文档进行大批量的编辑。docx它提供了一组功能丰富的函数和方法&#xff0c;用于创建、修改和读取Word文档。下面是docx模块中一些常用的函数和方法的介绍&#xff1a; 安装&#xff1a;pip install docx 一、准备一个word文档…

MYSQL执行一条SELECT语句的具体流程

昨天CSDN突然抽风 我一个ctrlz把整篇文章给撤掉了还不能复原 直接心态崩了不想写了 不过这部分果然还是很重要,还是写出来吧 流程图 这里面总共有两层结构Server层 储存引擎 Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现&#xff0c;主要包…

WebSocket理解

WebSocket理解 WebSocket定义与HTTP关系相同点:不同点&#xff1a;联系总体过程 HTTP问题长轮询Ajax轮询 WebSocket特点 WebSocket 定义 本质上是TCP的协议 持久化的协议 实现了浏览器和服务器的全双工通信&#xff0c;能更好的节省服务器资源和带宽 与HTTP关系 相同点: 基于…

【bug】flameshot在ubuntu上的4K屏幕,双屏幕上用不了截图

问题 直接在4K屏幕上运行flameshot截图&#xff0c;直接黑屏 主屏 &#xff1a;4K 副屏&#xff1a;2k 解决 2.1长按1-2秒开机键&#xff0c;先回到桌面。 2.2 设置主屏缩放为125% 2.3 设置键盘快捷键命令为env QT_AUTO_SCREEN_SCALE_FACTOR1 flameshot gui 替代flameshot的…

zeppelin的hive使用

zeppelin的hive使用 配置项 default.driver org.apache.hive.jdbc.HiveDriver default.url jdbc:hive2://192.168.xxx.xxx:10000 default.user hiveHive使用&#xff1a;点击create new note Default Interpreter选择hive

动态表单实现原理

目录 动态表单是什么 动态表单的关键 前后端职责 数据库与表结构 功能实现与改进建议 动态表单是什么 静态表单是很常见&#xff0c;也是常规做法&#xff0c;其表单的结构是固定的&#xff0c;通常情况下一个表单对应数据库的一张表&#xff0c;表单中一个数据项对应数据表的一…

idea创建webapp文件夹

结果的图片&#xff1a; 第一步&#xff1a; file-》project structure 第二步&#xff1a; 修改路径&#xff0c;点击右侧“Deloyment descriptors”下面的笔进行修改。 // 增加了src\main // web修改为了webapp C:\Users\www12\Desktop\huwantiku2\src\main\webapp\WEB-IN…