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

(进阶篇)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.6K21

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

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    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 响应结果。

    99350

    猫头虎分享:Python库 FastAPI 的简介、安装、用法详解入门教程

    在本篇博客,我们将详细介绍一个近年来崛起的Python库——FastAPI,它因其高性能和易用性受到开发者的喜爱。 FastAPI被认为是构建快速、现代Web APIs的理想选择。...FastAPI 是现代**Python Web**开发的利器,特别适合需要高性能的应用场景,机器学习模型的在线部署。 ️ 2....异常处理:通过 HTTPException 处理异常情况,返回适当的错误响应。 ❓ 5. 常见问题解答 (QA) Q1: FastAPI 支持异步编程吗? A: 支持。...FastAPI 原生支持异步编程,您可以在路由函数中使用 async def 轻松处理异步操作。 Q2: 如何在 FastAPI使用中间件?...尤其是在机器学习模型的部署和微服务架构的实现FastAPI 以其卓越的性能和易用性,未来将继续在 Web 开发领域占据重要位置。

    20010

    FastAPI后台开发基础(13): 异常处理 Exception

    此外,我们还在响应头中设置了自定义的my-header和Content-Type,后者指定了响应内容的类型和字符集。在设置HTTP头时,我们需要考虑字符编码的问题。...FastAPI作为一个现代、快速(高性能)的Web框架,提供了强大的异常处理机制,允许开发者自定义异常,从而更精细地控制错误响应。...本文将通过一个实际的例子,展示如何在FastAPI实现自定义异常处理。定义自定义异常首先,我们定义了一个名为MyException的自定义异常类,它继承自Python的基类Exception。...在初始化方法__init__,我们记录了异常发生的时间(使用ISO格式),并为每个异常实例生成了一个唯一的UUID。这两个属性将用于后续的错误响应,以提供详细的错误信息。...HTTPException是StarletteHTTPException的子类,这意味着当你抛出一个HTTPException时,它会被StarletteHTTPException的处理程序捕获。

    7421

    【云+社区年度征文】全面拥抱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。...如果我们要在代码同时使用这两个类,为了避免命名冲突,我们可以重命名其中一个类。

    87930

    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.8K40

    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

    88740

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

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

    83400

    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.6K60
    领券