fastapi高性能异步框架,极速上手

news2025/1/20 18:20:45

fastapi项目开发快速上手

简介

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

特性:

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

安装fastapi

pip install fastapi -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

安装uvicorn

因为fastapi的运行依赖于uvicorn,所以我们再安装一下uvicorn
pip install uvicorn -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

最简单的Demo先走一波

from fastapi import FastAPI
import uvicorn

app = FastAPI() # 创建 api 对象

@app.get("/") # 配置路由
def root():
    return {"成都": "雄起"}

# async def root():
#     return {"成都": "雄起"}


if __name__ == '__main__':
    uvicorn.run('main:app',port=8000) #main:py文件名 app:api对象名

在这里插入图片描述

简单解释一下,上面的Demo中有注释掉的async def root(),两种写法都可以用,只不过后者async是协程异步。后续会出文章单独讲协程实现并发I/O,这里顺带简单讲一下异步:比如程序在处理一个系统文件操作的时候windows系统需要5秒钟的时间才能给程序回复,那么在这5秒钟内程序就一直处于等待状态,如果5秒中内有新的命令进来,那么程序也不会执行。。那么异步的意思就是说,这5秒钟时间里程序不用处于等待的状态,可以执行其他命令,等到windows系统给回复后再回去继续执行剩下的。

再来一波get请求参数

from fastapi import FastAPI
import uvicorn
from pydantic import BaseModel

app = FastAPI() # 创建 api 对象

@app.get("/{item}") # 配置路由
def root(item:str)->str:  #注意:item:str这种写法的作用是提示,提示item这个参数是个str
                                # ->str 写法的作用也是提示,提示函数返回的是str
    if item=='ok':
        return {"成都": "雄起"}
        
if __name__ == '__main__':
    uvicorn.run('main:app',port=8000)
  

在这里插入图片描述

进阶Demo走一波

提要:在fastapi里,合理运用Python自带的第三方库pydantic中的BaseModel模块很重要,BaseModel模块用来检查接收的数据类型是否符合规范,如不符合,会报出具体错误。这也是fastapi受欢迎的原因之一,具体详见官方文档,这里不再赘述。
再来一波,进阶Demo:
这里需要安装下requests这个包哈。
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

import requests
import json
import base64


item=json.dumps({'cmd':r'E:\cProject\arr.c'})
flag=requests.post('http://127.0.0.1:8000',item)

filestream=base64.b64decode(json.loads(flag.text))
with open('arr.c','wb') as f:
    f.write(filestream)

print('完成')
from fastapi import FastAPI
import uvicorn
from pydantic import BaseModel

app = FastAPI() # 创建 api 对象

class Item(BaseModel):
    cmd:str

@app.post('/')
def fileDowm(item:Item):  #把传过来的字典交给Item进行解析,若解析不正确返回422请求格式错误。
    '''
    文件下载模块
    :param item: {'cmd':url}
    :return: filestream 字节流
    '''
    url=item.dict()['cmd']

    with open(url,'rb') as f:
        filestream=f.read()				#二进制读取文件
        import base64						
        filestream=base64.b64encode(filestream)    #转化为字节流进行文件传输
        
    return filestream


if __name__ == '__main__':
    uvicorn.run('main:app',port=8000)
    

OK,到此大家伙就可以自行进行基本的项目开发啦。当然fastapi的使用不仅限于我这里所讲,更多的请见官方文档。文章暂时没有贴出前端代码,后续我会更新博客贴出前端代码!

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

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

相关文章

全流程各工程类型地下水环境影响评价【一级】方法与MODFLOW Flex建模

目录 专题一 地下水基础知识学习 专题二 地下水环境影响评价过程讲解 专题三 地下水数值软件的学习及操作 专题四 相关专业软件(Surfer、Aquifer test)的学习 专题五 化工类建设项目地下水环评关键技术处理及上机操作 专题六 化工类建设项目地下水…

顶象助力如祺出行打造高品质服务

近日,广东省自然资源厅审批通过了如祺出行提交的测绘资质申请,如祺出行获得地理信息系统工程和互联网地图服务两个专业的乙级测绘资质。此次获批意味着,如祺出行能够在许可区域内依法合规开展数据标注和场景仿真等相关业务,构建全…

Oracle11g全新讲解之触发器和视图索引

触发器 1.触发器的基本讲解 当特定事件出现时自动执行的存储过程 语法结构 CREATE [OR REPLACE] TRIGGER trigger_name AFTER | BEFORE | INSTEAD OF [INSERT] [[OR] UPDATE [OF column_list]] [[OR] DELETE] ON table_or_view_name [REFERENCING {OLD [AS] old / NEW [AS]…

探索Jetpack Compose的Material You主题

探索Jetpack Compose的Material You主题 在本文中,我们将了解可用于 Jetpack Compose 的新 Material You 库,并了解我们如何将其动态颜色应用到 Stream Chat Compose SDK,以获得有趣、多彩和个性化的消息传递体验。 在本文中,您…

Spark大数据处理讲课笔记4.7 Spark SQL内置函数

文章目录 零、本讲学习目标一、Spark SQL内置函数(一)内置函数概述1、10类内置函数2、两种使用方式 (二)内置函数演示1、通过编程方式使用内置函数upper()2、通过SQL语句的方式使用内置函数upper()3、演示其它内置函数的使用 二、…

MySQL的安装和卸载-Linux版

MySQL8.0.26-Linux版安装 1. 准备一台Linux服务器 云服务器或者虚拟机都可以,Linux的版本为 CentOS7; 2. 下载Linux版MySQL安装包 https://download.csdn.net/download/weixin_44373940/87784825 3. 创建目录,并解压到对应目录中 mkdir mysql 解压到mysql目录中 tar -xvf…

【Arduino疑难杂症】:报错:上传失败:上传错误:exit status Oxffffffff

项目场景: 制作arduino宠物监控系统项目的过程中,摄像头方面使用到了ESP32Cam,制作过程中遇到了如下问题。 问题描述 [ERRORJ: (annot configure port, something wert wrong. 0riginal message: WindowsError(31,"xclxacxb…

Spring笔记-教程-快速回忆

title: Spring笔记 date: 2023-05-12 00:12:55 categories: 后端Java tags:JavaSpring Spring官网https://spring.io 框架图: 为什么要使用Spring 原先代码中存在的问题如下: 业务层: public class BookServiceImpl implements BookServi…

了解Swarm 集群管理

Swarm 集群管理 简介 Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。 支持的工具包括但不限…

SpringCache缓存常见问题

SpringCache 解决缓存常见问题 1 缓存穿透2 缓存雪崩3 缓存击穿 1 缓存穿透 缓存穿透是指缓存和数据库中都没有数据,而用户不断发起请求则这些请求会穿过缓存直接访问数据库,如发起为id为“-1”的数据或id为特别大不存在的数据。假如有恶意攻击&#xf…

TCP 和 UDP 协议详解

文章目录 1 概述2 TCP 协议2.1 报文格式2.2 三次握手,建立连接2.3 四次挥手,断开连接2.4 窗口机制 3 UDP 协议3.1 传输头格式 4 扩展4.1 常用端口号4.2 TCP 与 UDP 区别 1 概述 #mermaid-svg-aC8G8xwQRSdze7eM {font-family:"trebuchet ms",ve…

Mysql MHA高可用集群及故障切换

文章目录 一、MHA概述1.MHA的特点2. MHA的工作原理3.故障切换时MHA会做什么 二、实验搭建MySQLMHA1.配置主从分离2.安装MHA软件 总结 一、MHA概述 MHA(MasterHigh Availability)是一套优秀的mysql高可用环境下故障切换和主从复制的软件。 MHA解决了mysq…

铁路铁鞋UWB定位系统

在铁路运输过程中,当列车到达车站时,需要用专用铁鞋将列车固定在前轮和后轮上,以防止列车打滑和前进。所以,实时掌握铁鞋的位置信息十分重要,如果工人忘记撤回铁鞋子,则可能导致车辆停车和跳轨等事故频发。…

淘宝关键词搜索分析商品价格走势(商品列表接口,销量接口,价格接口,分类ID精准商品数据接口)接口代码对接

淘宝 OpenAPI(Open application programming interface)是一套 REST 方式的开放应用程序编程接口。淘宝网根据自己提供的电子商务基础服务,抽象并做成一系列的 API 接口。通过这些接口,可以让外部用户能够通过程序的方式访问淘宝网…

Vue 实现轮播图功能

Vue 是一款流行的前端框架,它提供了一系列的工具和组件,使得开发者可以更加便捷地创建交互式的 Web 应用程序。轮播图是 Web 应用程序中常见的一种交互式组件,可以用来展示图片、新闻、广告等内容。在 Vue 中,我们可以使用第三方组…

RVMedia VCL 8.0 for Delphi Crack

RVMedia VCL 8.0 for Delphi Crack FGX Native Network Frame是制造跨平台和现代移动设备的强大工具。FG开发团队的主要目标是简化移动应用程序的开发,使大多数人都能以各种技能开发应用程序。此外,这种形式的网络最重要的功能可以在100%的用户界面中设计…

分库分表的 21 条法则,hold 住!

大家好,我是小富~ (一)好好的系统,为什么要分库分表? 本文是《分库分表ShardingSphere5.x原理与实战》系列的第二篇文章,距离上一篇文章已经过去好久了,惭愧惭愧~ 还是…

GIS应用技巧之Landsat、Sport等遥感影像去除黑边的多种方法

一、前言 当我们利用GIS对遥感影像处理过程中,有时候需要将几张小的影像图镶嵌为一张大的,但是却被黑边所阻挡,这时候就需要找到一种方法来将黑边去掉了。由于遥感影像一般都太大了,不好获取也不好处理,这里我们选用的…

【C#】继承和序列化

前言 在之前的一篇文章中: 【C#】复杂Json的反序列 任意Json获取_code bean的博客-CSDN博客其中result这个key对应的内容是可能发生变化的,所以这里可以用到泛型。如何将一个复杂类型的JSON进行反序列化。那就是如何把json拆解成一个个子类的过程。htt…

NLP 中语言表示 (向量化) 的基本原理和历史演变综述

目录 1 前言2 语言表示2.1 离散表示2.1.1 独热编码2.1.2 词袋模型2.1.3 TF-IDF 模型2.1.4 N-gram 模型2.1.5 基于聚类的表示 2.2 连续表示2.2.1 分布式表示2.2.2 Word Embedding2.2.2.1 Word2Vec2.2.2.2 GloVe2.2.2.3 FastText 2.2.3 基础神经网络模型2.2.3.1 神经词袋模型2.2.…