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。

环境搭建

安装

pip install fastapi[all]

基础文件

main.py

from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
    return {"coleak"}
@app.get("/hello/{name}")
async def say_hello(name: str):
    return {"message": f"Hello {name}"}

使用上面的方式需要使用搭建时的fastapiproject运行配置才可以,或者直接使用下面的方式一样的

from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/")
async def root():
    """这里是首页"""
    return {"coleak"}
@app.get("/hello/{name}")
async def say_hello(name: str):
    return {"message": f"Hello {name}"}
if __name__ == '__main__':
    uvicorn.run(app)

test_main.http

# Test your FastAPI endpoints
GET http://127.0.0.1:8000/
Accept: application/json
###
GET http://127.0.0.1:8000/hello/User
Accept: application/json
###

自动文档

redoc
docs

基础使用

POST请求

# @app.post("/login")
# def login():
#     return {"message":"successful"}
@app.api_route("/login", methods=["GET", "POST"])
def login():
    return {"message": "successful"}

传递参数

@app.get("/hello/{name}")
async def say_hello(name: str):
    return {"message": f"Hello {name}"}
@app.get("/test")
async def say_hello(id: int,token=Header(None)):
    return {"id": id,"token":token}
@app.post("/login")
def login(data=Body(None)):
    return {"data":data}
@app.post("/login")
def login(username=Form(None),passwd=Form(None)):
    return {"data":{"username":username,"passwd":passwd}}
//username=coeleak&passwd=123456

返回定制信息

//返回json
@app.get("/user")
def user():
    return JSONResponse(content={"msg":"getuser"},status_code=233,headers={"a":"b"})
HTTP/1.1 233
Date: Sun, 21 May 2023 04:57:30 GMT
Server: uvicorn
A: b
Content-Length: 17
Content-Type: application/json
{"msg":"getuser"}
//返回HTML
@app.get("/user")
def user():
    html="""
    <html>
    <body>
    <p style="color:red">hello</p>
    </body>
    </html>
    """
    return HTMLResponse(html)
//返回文件
@app.get("/picture")
def picture():
    picture="col.jpg"
    return FileResponse(picture)

jinja2返回html

app = FastAPI()
template = Jinja2Templates("page")
@app.get("/")
def index(req:Request,username):
    return template.TemplateResponse("index.html",context={"request":req,"name":username})
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>fastapi {{name}}</p>
</body>
</html>
:username})
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>fastapi {{name}}</p>
</body>
</html>


目录
相关文章
|
24天前
|
数据处理 调度 开发者
Python异步编程入门:让程序不再“傻等”
Python异步编程入门:让程序不再“傻等”
|
6月前
|
人工智能 JSON 自然语言处理
让数据查询又快又准,瓴羊Dataphin MCP保姆级教程来啦!
在AI Agent快速发展的背景下,优质数据资产成为提升AI生产力的核心。瓴羊Dataphin通过MCP(Model Context Protocol)服务助力企业高效挖掘数据价值。MCP采用SSE协议,提供listDataServiceAPI与invokeDataServiceAPI两种工具,简化数据集成与调用流程。例如,结合大模型可快速构建“智能查询助手”,实现自然语言查询数据功能。未来,Dataphin将持续迭代工具集,支持更多数据研发与治理场景。
268 0
在Linux中,列出几种常见打包工具并写相应解压缩参数。
在Linux中,列出几种常见打包工具并写相应解压缩参数。
|
API 开发者
淘宝官方商品、交易、订单、物流、插旗接口接入说明
这些接口涉及淘宝店铺订单管理的关键方面,包括订单列表、订单详情及订单物流信息的获取。订单列表接口(如`taobao.trades.sold.get`和`taobao.topats.trades.sold.get`)帮助商家快速了解订单概览,进行基本管理和统计。订单详情接口(如`taobao.trade.fullinfo.get`和`taobao.topats.trades.fullinfo.get`)提供单个订单的全面信息,便于发货准备和服务支持。订单物流接口则允许跟踪订单的物流状态,确保配送顺畅。使用这些接口需遵循淘宝开放平台的规定,并关注API调用限制与更新。
|
网络协议 网络虚拟化
接收网络包的过程——从硬件网卡解析到IP
【9月更文挑战第18天】这段内容详细描述了网络包接收过程中机制。当网络包触发中断后,内核处理完这批网络包,会进入主动轮询模式,持续处理后续到来的包,直至处理间隙返回其他任务,从而减少中断次数,提高处理效率。此机制涉及网卡驱动初始化时注册轮询函数,通过软中断触发后续处理,并逐步深入内核网络协议栈,最终到达TCP层。整个接收流程分为多个层次,包括DMA技术存入Ring Buffer、中断通知CPU、软中断处理、以及进入内核网络协议栈等多个步骤。
【手把手教学】最新ChatTTS语音合成项目使用指南【附所有源码与模型】
【手把手教学】最新ChatTTS语音合成项目使用指南【附所有源码与模型】
|
机器学习/深度学习 存储 安全
基于YOLOv8深度学习的火焰烟雾检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
基于YOLOv8深度学习的火焰烟雾检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
|
算法 Java Python
jts里的lineString.getLength()的单位是什么如何换算成距离
【6月更文挑战第7天】jts里的lineString.getLength()的单位是什么如何换算成距离
769 0
|
算法 数据库
隐私计算实训营第6讲-------隐语PIR介绍及开发实践丨隐私计算实训营 第1期
隐匿查询(PIR)允许用户在不暴露查询内容的情况下检索服务器数据库。PIR分为单服务器和多服务器方案,以及Index PIR和Keyword PIR两类。隐语目前实现了单服务器的SealPIR(用于Index PIR)和Labeled PSI(用于Keyword PIR)。SealPIR优化点包括:数据打包、查询向量压缩、支持多维和多个查询。未来,隐语PIR的计划包括性能提升、多服务器方案和新算法的探索。
779 3