首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

FastAPI(27)- Handling Errors 处理错误

(状态码和响应信息)返回给客户端,需要使用 HTTPException HTTPException 是一个普通的 exception,包含和 API 相关的附加数据 因为是一个 Python exception...,应该 raise 它,而不是 return 它 查看一下 HTTPException 源码 status_code:响应状态吗 detail:报错信息 headers:响应头 简单的栗子 当 item_id...FastAPI 全局处理此异常 可以使用 添加自定义异常处理程序 @app.exception_handler() 实际代码 #!...JSON 响应 可以使用自己的异常处理程序覆盖(重写)这些默认的异常处理程序 重写 HTTPException 异常处理程序 # 导入对应的异常类 from fastapi.exceptions import...唯一不同:FastAPIHTTPException 支持自定义 Response Headers,在 OAuth2.0 这是需要用到的 但需要注册(重写/重用)一个异常处理程序时,应该用 Starlette

99310

(进阶篇)Python web框架FastAPI——一个比Flask和Tornada更高性能的API 框架

前言 上一篇已经初步了解了 FastAPI 的基本使用,但是如果想要真正把 FastAPI 部署上线到服务器,那么你需要了解更多,学习更多。...同时支持多种请求方式 在上面的 login 例子可以发现,我在上下文 request 通过判断路由的请求方式来进行响应的逻辑处理,比如如果不是 Post请求 就把它重定向到 login 页面等等...数据库 在 FastAPI ,我们一既往的使用了 SQLAlchemy 初始化数据库文件: from sqlalchemy import create_enginefrom sqlalchemy.ext.declarative...异常处理 在各种 http资源 不存在或者访问异常的时候都需要有 http状态码 和 异常说明,例如, 404 Not Found 错误,Post请求出现的 422,服务端的 500 错误,所以如何在程序合理的引发异常...看看 FastAPI 如何使用异常处理 from fastapi import FastAPI, HTTPException app = FastAPI() items = {"foo": "The

2.5K21
您找到你想要的搜索结果了吗?
是的
没有找到

FastAPI 学习之路(十九)处理错误

FastAPI 系列文章: FastAPI 学习之路(一) FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四)使用pydantic模型做请求体...FastAPI 学习之路(十五)响应状态码 FastAPI 学习之路(十六)Form表单 FastAPI 学习之路(十七)上传文件 FastAPI 学习之路(十八)表单与文件 前言 我们之前分享的是表单和文件组合使用...如在调用路径操作函数里的工具函数时,触发了 HTTPExceptionFastAPI 就不再继续执行路径操作函数的后续代码,而是立即终止请求,并把 HTTPException 的 HTTP 错误发送至客户端...我们看下如何自定义响应头 from fastapi import FastAPI, HTTPException app = FastAPI() items = {"test": "雷子说测试开发"}...FastAPI 自带了一些默认异常处理器。 触发 HTTPException 或请求无效数据时,这些处理器返回默认的 JSON 响应结果。

95350

【云+社区年度征文】全面拥抱FastApi-优雅的处理HTTPException

为了直观友好的给客户端返回错误, 在 FastApi 中一般使用 HTTPException from fastapi import FastAPIHTTPException app = FastAPI...自定义异常类 和 starlette 源码处理异常一样,你也可以自定义一个异常处理类 定义的异常处理类,使用@app.exception_handler() 支持在 FastAPI 全局使用该异常类...有许多的默认异常处理类 这些处理程序负责在引发 HTTPException 和请求包含无效数据时返回默认 JSON 响应 比如下面的路由是只支持 item_id 为 int 类型的路径函数 @app.get...,使用 @app.exception_handler(HTTPException) 装饰异常处理函数即可 from fastapi.responses import PlainTextResponse...,可以将请求体加到返回的 response 这样在出现问题的时候,可以通过日志或响应,快速定位到问题!

1.8K40

fastapi 请求文件 表单 处理错误 路径操作配置 jsonable_encoder

自定义响应头 6. 自定义异常处理器 7. 覆盖默认异常处理器 8. 使用 RequestValidationError 的请求体 9. 复用 FastAPI 异常处理器 10....处理错误 raise HTTPException() from fastapi import FastAPI, HTTPException app = FastAPI() items = {"foo"...自定义响应HTTPException(headers=xxx) @app.get("/items-header/{item_id}") async def read_item_header(item_id...复用 FastAPI 异常处理器 在自定义处理完异常之后,还可以继续使用 默认的异常处理器 from fastapi import FastAPI, HTTPException from fastapi.exception_handlers...路径操作参数配置 10.1 status_code,tags tags = [字符串],将反映到 文档 from typing import Optional, Set from fastapi import

1.1K10

高效优雅处理程序错误实战

“非法字符”、“括号不匹配”、“缺少;”之类的错误。 1.2 语义错误 语义错误是指源程序不符合语义规则的错误,即一条语句试图执行一条不可能执行的操作而产生的错误。...6 fastapi HTTPException 对比 Starlette HTTPException fastapi HTTPException 继承自 Starlette 的 HTTPException...唯一的区别 fastapi HTTPException 允许你在 response 添加头信息。主要在内部用于 OAuth 2.0 以及一些安全相关的功能。...因此,通常我们在代码抛出 fastapiHTTPException 异常。但是,当我们注册异常处理器的时候,我们应该注册为 Starlette 的 HTTPException。...如果我们要在代码同时使用这两个类,为了避免命名冲突,我们可以重命名其中一个类。

85330

FastAPI 学习之路(二十六)全局依赖项

FastAPI 系列文章: FastAPI 学习之路(一) FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四)使用pydantic模型做请求体...FastAPI 学习之路(十一) FastAPI 学习之路(十二)额外数据类型 FastAPI 学习之路(十三)Cookie 参数,Header参数 FastAPI 学习之路(十四)响应模型...FastAPI 学习之路(十五)响应状态码 FastAPI 学习之路(十六)Form表单 FastAPI 学习之路(十七)上传文件 FastAPI 学习之路(十八)表单与文件 FastAPI 学习之路...from fastapi import FastAPI,Header, HTTPException,Depends fake_items_db = [{"city": "beijing"}, {"city...="leizishuoceshikaifa": raise HTTPException(status_code=400, detail="Token header invalid") app

84640

FastAPI(58)- 使用 OAuth2PasswordBearer 的简单栗子

可以使用 OAuth2 通过 FastAPI 来构建它,通过 FastAPI 提供的工具来处理安全性 OAuth2 的授权模式 授权码授权模式 Authorization Code Grant 隐式授权模式...中使用 OAuth2 的简单栗子 import uvicorn from fastapi import FastAPI, Depends from fastapi.security import OAuth2PasswordBearer...import FastAPI, Depends, HTTPException, status from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm...__': uvicorn.run(app="49_bearer:app", reload=True, host="127.0.0.1", port=8080) /token 路径操作函数的响应...Bearer johndoe' 所以验证就失败啦 验证一个不活跃的用户 authenticate 表单填入 username:alice password:secret2 请求 /users/me 得到的响应

2.5K40

FastAPI基础-路由和视图函数(三)

组合多个参数在FastAPI,我们可以使用路径参数、查询参数、请求体和请求头来组合多个参数。...然后,FastAPI将这些参数传递给视图函数create_item()作为参数。视图函数返回一个JSON响应使用依赖注入在FastAPI,我们可以使用依赖注入来管理复杂的依赖关系和共享的状态。...声明依赖项在FastAPI,我们可以使用Depends类来声明一个依赖项。例如,我们可以使用Depends来声明一个依赖项get_token(),该函数从请求头中获取身份验证令牌。...如果依赖项无法解析或返回值无效,则FastAPI将引发HTTP异常。声明复杂依赖项在FastAPI,我们可以使用Depends来声明复杂的依赖项,例如依赖于其他依赖项的依赖项。...该函数使用db参数来执行数据库查询,并返回查询结果作为JSON响应

79100

FastAPI--中间件(6)

一、概述 所谓的中间件,其实和我们bottle的中间件作用是一致。有些方法或操作需要在所有路由之前执行,比如要加一个http访问的拦截器,可以对部分接口API需要授权才能访问的接口进行验证之类的。...其实和bottle或flask 钩子函数很相似 二、示例 示例如下: import uvicorn from fastapi import FastAPI, Request from fastapi.responses... import JSONResponse import time from fastapi import FastAPIHTTPException from fastapi.exceptions ... import HTTPException as StarletteHTTPException app = FastAPI() @app.exception_handler(StarletteHTTPException...    uvicorn.run(app='main:app', host="127.0.0.1", port=8000, reload=True, debug=True) 然后我们请求完成后发现,我们的响应头里多了一个新增的请求头

1.5K60

FastAPI(40)- 大型应用程序的项目拆分

背景 假设要搭建一个测试平台,那么整个项目的 API 数量肯定很多个,他们不可能放在同一个文件 FastAPI 提供了一个方便的工具来构建应用程序,同时保持所有的灵活性 项目架构 假设结构如下 . ├.../users", # 标签 tags=["users"], # 依赖项 dependencies=[Depends(get_token_header)], # 响应...= "plumbus": raise HTTPException( status_code=403, detail="You can only update the.../items", # 标签 tags=["items"], # 依赖项 dependencies=[Depends(get_token_header)], # 响应...app.include_router() 可以将每个 APIRouter 添加到主 FastAPI 应用程序,它将包括来自该路由器的所有路由作为它的一部分 它实际上会在内部为 APIRouter 声明的每个路径操作创建一个路径操作

1.4K10

fastapi 路径依赖项Depends 装饰器依赖dependencies 全局依赖 带 yield 的依赖

使用带 yield 上下文管理器作为依赖项 learn from https://fastapi.tiangolo.com/zh/tutorial/dependencies/ 1....可以声明异步的 async def 依赖项 也可以在异步的 async def 路径操作函数声明普通的 def 依赖项 交互式文档里也会显示 依赖的参数 2....在同一个路径操作 多次声明了同一个依赖项,例如,多个依赖项共用一个子依赖项,FastAPI 在处理同一请求时,只调用一次该子依赖项,使用了缓存 如果不想使用「缓存」值,而是为需要在同一请求的每一步操作...的 list 就算这些依赖项会返回值,它们的值也不会传递给路径操作函数 可以触发异常 from fastapi import Depends, FastAPI, Header, HTTPException...fastapi import Depends, FastAPI, Header, HTTPException async def verify_token(x_token: str = Header

2.3K30
领券