10个最容易被忽视的 FastAPI 实用功能

FastAPI是一种现代、高性能的Python Web框架,用于构建Web应用程序和API。

它基于Python的异步编程库asyncioawait语法,以及类型注解和自动文档生成等特性,提供了快速、易用和可靠的开发体验,接下来本文将介绍10项被忽视的FastAPI实用功能。

图片

1. 依赖注入

FastAPI支持定义“依赖项”,这些依赖项会被解析并注入到路径操作中。使用这个功能处理常见任务,如数据库连接或用户身份验证。

def get_db():db = SessionLocal()try:yield dbfinally:db.close()@app.get("/users/{user_id}")
def read_user(user_id: int, db: Session = Depends(get_db)):user = db.query(User).get(user_id)return user

2. 响应模型

使用Pydantic模型声明响应结构。这将自动生成API文档并验证响应数据。

class User(BaseModel):id: intname: str@app.get("/users/{user_id}", response_model=User)
def read_user(user_id: int): ...

3. HTTP异常

抛出带有状态代码和详细信息的HTTP异常,以处理不同的HTTP状态代码。

@app.get("/items/{item_id}")
def read_item(item_id: str):if item_id not in items:raise HTTPException(status_code=404, detail="Item not found")return {"item": items[item_id]}

4. 路径参数和转换器

使用转换器将路径参数转换为所需的Python数据类型。

@app.get("/items/{item_id}")
def read_item(item_id: int): ...

5. 后台任务

将需要长期运行的任务委托给后台,以释放API的响应时间。

@app.post("/send-notification/{email}")
async def send_notification(email: str, background_tasks: BackgroundTasks):background_tasks.add_task(send_email, email=email)return {"message": "Notification sent in the background"}

6. 查询参数和字符串验证

使用Query声明字符串查询参数和验证。

@app.get("/items/")
async def read_items(q: Optional[str] = Query(None, max_length=50)):results = {"items": [{"item_id": "Foo"}]}if q:results.update({"q": q})return results

7. 带密码(和散列)的OAuth2和使用JWT令牌的Bearer

FastAPI内置了OAuth2密码和Bearer,用于处理用户注册、登录和令牌检索的所有路径。

@app.post("/token", response_model=Token)
def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends()):user = authenticate_user(fake_users_db, form_data.username, form_data.password)if not user:raise HTTPException(status_code=400, detail="Incorrect username or password")access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)access_token = create_access_token(data={"sub": user.username}, expires_delta=access_token_expires)return {"access_token": access_token, "token_type": "bearer"}

8. 使用Pydantic进行数据验证和序列化

FastAPI使用Pydantic进行数据验证和序列化,提供了一种处理错误和复杂类型的简单方式。

class Item(BaseModel):name: strdescription: str@app.post("/items/")
async def create_item(item: Item):return item

9. 使用Starlette的TestClient进行测试

FastAPI支持使用Starlette的TestClient编写简洁的测试用例。

from starlette.testclient import TestClientdef test_read_main():client = TestClient(app)response = client.get("/")assert response.status_code == 200

10. 自动交互式API文档:

FastAPI通过Swagger UI和ReDoc提供自动交互式API文档。只需访问/docs/redoc路由即可访问这些文档。

技术交流

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

技术交流、资料干货、数据&源码,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、微信搜索公众号:Python学习与数据挖掘,后台回复: 交流
方式②、添加微信号:dkl88194,备注:来自CSDN +交流

毕设/大作业系列

  • 毕设/大作业:基于Python+Flask+MySQL的豆瓣电影可视化系统
  • 毕设/大作业:搭建基于 Python+Flask+MySQL 的学生培养计划管理系统(附源码)
  • 毕设/大作业:一款基于 Python+flask 的态势感知系统(附完整源码)
  • 毕设/大作业:基于 Python 的 Flask 框架开发的在线电影网站系统(附完整源码)
  • 毕设/大作业:基于 Echarts + Python Flask 动态实时大屏轻松可以实现
  • 毕设/大作业:基于 Python+Django 构建智能互动拍照系统
  • 毕设/大作业:基于 Python+Flask+SQLite 的网易云音乐评论情感分析系统
  • 毕设/大作业:基于 Python 和Surprise库,新手轻松搭建推荐系统
  • 毕设/大作业:基于 Python+Django+MySQL 数据库的租房数据可视化系统

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

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

相关文章

Qt/QML编程学习之心得:hicar手机投屏到车机中控的实现(32)

hicar,是华为推出的一款手机APP,有百度地图、华为音乐,更多应用中还有很多对应手机上装在的其他APP,都可以在这个里面打开使用,对开车的司机非常友好。但它不仅仅是用在手机上,它还可以投屏到车机中控上,这是比较神奇的一点。 HiCar本质上是一套智能投屏系统,理论上所有…

React Native 桥接原生常量

一、编写并注册原生常量方法 在 SmallDaysAppModule 这个模块中有一个方法 getConstans ,重载这个方法就可将自定义的常量返回,系统会自行调用该方法并返回定义的常量将其直接注入到 JS 层,在 JS 层直接获取即可。 二、JS 层获取原生常量&am…

Vulnhub靶机:Corrosion1

一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.15) 靶机:corrosion:1(10.0.2.12) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vulnhub.com/entry/c…

MongoDB快速实战与基本原理

MongoDB 介绍 什么是 MongoDB MongoDB 是一个文档数据库(以 JSON 为数据模型),由 C 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。文档来自于“JSON Document”,并非我们一般理解的 PDF、WORD 文档…

构建数字化美食未来:深入了解连锁餐饮系统的技术实现

在当今数字化时代,连锁餐饮系统的设计与开发已成为餐饮业成功经营的重要一环。本文将深入研究连锁餐饮系统的技术实现,结合代码演示,为技术开发者和餐饮业者提供深刻的理解。 1. 技术选型与系统架构 在开始设计开发前,首先要考…

您的计算机已被.LIVE勒索病毒感染?恢复您的数据的方法在这里!

引言: 在数字时代,.LIVE勒索病毒如暗夜中的黑暗调,威胁着个人和企业的数字安全。本文将深入介绍.LIVE勒索病毒的特征,提供解密数据的方法,并讨论预防措施,让我们共同筑起数字世界的防护之墙。数据的重要性…

【MYSQL】MYSQL 的学习教程(十一)之 MySQL 不同隔离级别,都使用了哪些锁

聊聊不同隔离级别下,都会使用哪些锁? 1. MySQL 锁机制 对于 MySQL 来说,如果只支持串行访问的话,那么其效率会非常低。因此,为了提高数据库的运行效率,MySQL 需要支持并发访问。而在并发访问的情况下&…

CMU15-445-Spring-2023-Project #2 - B+Tree

前置知识:参考上一篇博文 CMU15-445-Spring-2023-Project #2 - 前置知识(lec07-010) CHECKPOINT #1 Task #1 - BTree Pages 实现三个page class来存储B树的数据。 BTree Page internal page和leaf page继承的基类,只包含两个…

软件测试|好用的pycharm插件推荐(五)——Translation

前言 在我们的日常工作中,经常会遇到需要查看各个第三方库源码的问题,在很多情况下,我们的英语能力不能够满足我们完全读懂源码,所以我们就需要借助翻译工具来帮助我们理解第三方库的源码,如果我们将源码复制再使用其…

使用Vivado Design Suite平台板、将IP目录与平台板流一起使用

使用Vivado Design Suite平台板流 Vivado设计套件允许您使用AMD目标设计平台板(TDP)创建项目,或者已经添加到板库的用户指定板。当您选择特定板,Vivado设计工具显示有关板的信息,并启用其他设计器作为IP定制的一部分以…

STK 特定问题建模(五)频谱分析(第一部分)

文章目录 简介一、GEO星地通信收发机设计1.1 GEO卫星仿真1.2 地面接收机仿真 二、LEO星座及天线设计 简介 本篇对卫星通信中的频谱利用率、潜在干扰对频谱的影响进行分析,以LEO卫星信号对GEO通信链路影响为例,分析星地链路频谱。 建模将从以下几个部分…

2000-2022各省、地级市风险投资(VC)数据

2000-2022各省、地级市风险投资(VC)数据 1、时间:2000-2022年 2、范围:350个地级市,34省 3、指标:包含投资机构层面的风险投资原始数据,汇总到省市层面的结果数据,具体指标如下&a…