首页
学习
活动
专区
圈层
工具
发布

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

定义路由和视图函数首先,我们需要导入FastAPI类,并创建一个FastAPI应用程序实例。然后,我们可以定义路由和视图函数。路由是一个字符串,表示我们想要绑定到该路由的URL路径。...路由中的{item_id}是一个路径参数,我们将在下一节中介绍。在这里,我们使用了装饰器@app.get()来告诉FastAPI将这些视图函数绑定到GET请求的对应路由。...还有其他的装饰器,如@app.post()、@app.put()等,可以用于处理不同类型的HTTP请求。处理路径参数在FastAPI中,我们可以使用路径参数来处理动态的URL路径。...路径参数是在路由中以{parameter}的形式定义的,并在对应的视图函数中作为参数接收。...查询参数以=分隔查询参数的键和值,并以&分隔多个查询参数。当收到GET请求时,FastAPI将提取查询参数q,并将其传递给视图函数read_item()作为参数。

1.2K10

FastAPI(8)- 请求体 Request Body

JSON 字符串 将字段值转换相应的类型(若有需要) 验证数据,如果验证失败,会返回一个清晰的错误,准确指出错误数据的位置和信息 item 会接收到完整的请求体数据,拥有所有属性及其类型,IDE 也会给予对应的智能提示...传了 bool 类型的数据 tax: float FastAPi 会将传进来的值自动转换为指定类型的值 将 true 转成 str 类型,即 "True" 将 12.22 转成 str 类型,...str,所以 IDE 会智能提示 str 内置的方法 Request body + path + query parameters 综合栗子 可以同时声明请求体、路径参数、查询参数 FastAPI...属性值 result.update({"name": name}) return result FastAPI 识别参数的逻辑 如果参数也在路径中声明,它将解释为路径参数【item_id...】 如果参数是单数类型(如int、float、str、boo l等),它将被解释为查询参数【name】 如果参数被声明为 Pydantic 模型的类型,它将被解析为请求体【item】 正确传参的请求结果

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

    全面拥抱FastApi —三大参数及验证

    前面说过 FastApi 的一大特点是基于标准的 Python 3.6类型声明,兼具参数校验功能,这一切都要归功于 Pydantic 路径参数 路径参数即 url 路径参数,可以使用 Python 格式字符串相同语法声明路径...之后的键值对参数 那么在服务端 FastApi 如何来接收这种参数呢?...其中还有一个是路径参数:item_id, str 类型 请求体参数 要发送请求正文,必须使用一个:POST, PUT,DELETE或PATCH,需导入 Pydantic 的 BaseModel from...,可以实现以下功能: 以 JSON 读取请求的正文 根据声明的类型,自动对参数进行转换 验证数据,如果数据无效,它将返回一个清晰的错误,指出错误数据的确切位置和来源 在参数中接收收到的数据 item,并能获取所有属性及所有编辑器的支持...: item_id: 路径参数 q: 参数是一个的单一类型(如int,float,str,bool,等等)将被解释为一个查询参数 item: 参数声明为 Pydantic 模型的类型,则将被解释为请求

    5.9K30

    居然有比Flask更好用更简单的框架

    FastApi 编写接口会智能的返回错误信息,提示 num 字段缺失,未传参,保证了接口的健壮性。参数校验由 FastApi 框架自己完成,不用我们再写额外的代码进行参数校验。...1).Flask 部署方式 由于 Flask 本身是不支持异步编码,所以它一般的部署方式和同步的框架 Django 是一样的,都是用 uwsgi 部署。...而类型注释可以对函数的参数进行类型注解,也可以对函数的返回值进行类型注解。使用类型注释保证了更少的错误。...细心的同学会发现,小编在 FastApi 代码中写了一些基于标准的 Python 3.6+ 的类型注释声明,对一些请求参数的类型做了限定,比如: ?...小编找了 FastApi 一段源码,每个请求参数和返回参数都做了类型注释的声明: ?

    4.5K30

    万字解读:8种常见框架,选择哪一种来开发MCP呢?

    值得注意的是,它还不支持用于流响应的服务器发送事件 (SSE) ,也不支持 MCP 新的采样和通知机制。...FastAPI-MCP 保留了端点的模式和文档,以便向 LLM 提供有意义的工具描述,并且如果需要的话,允许添加不绑定到 HTTP 端点的额外自定义 MCP 工具。...Foxy 对 Fx 的使用将应用程序的结构与该框架绑定在一起;不熟悉 Fx 的开发人员可能必须学习其约定。...另外,与官方 SDK 绑定意味着需要随着规范的发展关注更新,但是考虑到活跃社区,这通常是可管理的。...例如,使用 @Tool 注释一个方法使其成为一个 MCP 可调用工具,方法参数和返回类型定义了输入 / 输出模式。扩展会处理所有的协议谈判。

    9.7K12

    API 接口开发也没那么难,Python FastAPI Web 框架教程来了!

    FastAPI 的使用方法和设计参考了几十个 python 明星项目 博采众长 吸收各家精华 FastAPI 和 Flask 一样简约 FastAPI 非常新 并且基于 python3.6 的类型声明系统...自动生成文档 类型声明和数据检验 内置身份认证 性能强 原生支持异步 强大的依赖注入系统 GraphQL 和 WebSocket 支持 二、准备工作 1.编译器工具 Python、Pycharm 2....www.json.cn/ 3.api文档在线生成 文档解析 文档备注信息 4.发送请求 POST请求 使用ApiPost接口测试工具来访问接口 定义多种请求格式 5.获取URL参数...): return {"id":id} if __name__ == '__main__': uvicorn.run(app) 6.获取请求头参数 main.py import...Todo app=FastAPI() template=Jinja2Templates("pages") # 数据库绑定 register_tortoise(app,db_url="mysql://root

    5.6K30

    FastAPI后台开发基础(2):路径参数

    路径参数的类型 int / str示例代码from __future__ import annotationsimport uvicornfrom fastapi import FastAPIapp =...FastAPI()# 路径中的参数区分类型,比如 str 和 int,在打印时一个会带引号,一个不带引号# curl -X 'GET' 'http://127.0.0.1:8000/str/123'...first'}@app.get('/first')async def second(): return {'message': 'second'}当定义了两个 first 时,总是返回第一个路由绑定的函数...str 类型的实例 这样做的好处是你可以直接将枚举成员当作字符串使用 享受字符串的所有方法和属性 同时保持枚举的唯一性和不可变性 """ a = "aaa" b =.../字符的路径参数示例代码from __future__ import annotationsimport uvicornfrom fastapi import FastAPI, Pathapp = FastAPI

    48032

    构建AI智能体:基于OpenAI Whisper-large-v3模型的本地化部署实现语音识别提取摘要

    in allowed_extensions: raise HTTPException( status_code=400, detail=f"不支持的文件类型...、语言代码、任务类型)异步文件处理:使用await file.read()异步读取上传文件后台任务:利用FastAPI的BackgroundTasks自动清理临时文件结构化响应:统一的成功/错误响应格式详细日志...( status_code=400, detail=f"不支持的语言: {language}" ) # 验证任务参数 if...ASGI服务器主机绑定:0.0.0.0允许所有网络接口访问端口配置:默认使用8000端口日志级别:设置适当的日志详细程度3....API设计思考在设计API时,我们遵循了这些工程原则:一致性:所有接口返回统一格式的JSON响应容错性:完善的参数验证和错误处理可观测性:详细的日志记录和状态监控性能优化策略:使用FastAPI的异步特性处理并发请求实现请求队列管理

    38810

    FastAPI(4)- 路径参数 Path Parameters

    可通过请求传递,然后 FastAPI 解析 最简单的栗子 import uvicorn from fastapi import FastAPI app = FastAPI() # 路径参数 item_id...uvicorn.run(app="2_get:app", host="127.0.0.1", port=8080, reload=True, debug=True) postman 请求结果 限定类型的路径参数...# 指定类型的路径参数 @app.get("/items/{item_id}/article/{num}") async def path_test(item_id: str, num: int):...return {"item_id": item_id, "num": num} 多个路径参数,且有指定类型 正确传参的请求结果 123 传进来的时候是字符串,但 FastAPI 会自动解析转换成...路径转换器 前言 当你有一个路径是 ,但是不确定 file_path 到底会取什么值,并不是固定的长度,可能是 /files/home/johndoe/myfile.txt 也可能是 /files/

    2.4K22

    python高并发优选之FastAPI

    FastAPI是一个基于Python 3.6+的现代Web框架,它专注于高性能和易用性。FastAPI通过结合多种技术实现了出色的性能,包括异步编程、类型提示和自动文档生成。...其中item_id是一个整数类型的路径参数,而q是一个字符串类型的查询参数,它可以为空(因为指定了默认值)。...强类型支持:FastAPI支持Python 3.6+的标准Type Hints功能,它可以校验数据类型并在文档中进行描述,这对于API的测试、调试和使用都非常有帮助。...类型提示和文档生成:FastAPI提供了类型提示和自动文档生成功能,使得API的编写变得简单方便,而Flask没有这个功能,需要手动编写文档。...数据验证和转换:FastAPI使用Pydantic库进行数据验证和转换,可以帮助开发者在编写API时减少出错的可能;Flask没有这个功能,需要手动编写数据验证和转换的代码。

    2.8K30

    FastAPI 学习之路(十五)响应状态码

    FastAPI 学习之路(十一) FastAPI 学习之路(十二)额外数据类型 FastAPI 学习之路(十三)Cookie 参数,Header参数 FastAPI 学习之路(十四)响应模型 前言...我们之前分享的是是请求模型,请求参数,这次呢,我们看下响应状态码相对应的。...在以下任意的接口路径中使用 status_code 参数来声明用于响应的 HTTP 状态码: @app.get() @app.post() @app.put() @app.delete() 我们可以简单的看下...具有这些状态码的响应可能有或者可能没有响应体,但 304「未修改」是个例外,该响应不得含有响应体。 400 及以上状态码用于「客户端错误」响应。这些可能是你第二常使用的类型。...from fastapi import FastAPI,status 那我们我们在写的时候,有对应的状态码以及代表的含义。我们可以根据对应的需求,去改变对应的状态码。

    1.2K60

    Python Web 框架 FastAPI

    FastAPI 是一个现代 Web 框架,速度相对较快,用于基于标准 Python 类型提示使用 Python 3.7+ 构建 API。...可以通过访问应用程序中的特定端点来访问此文档,这使得理解和测试 API 变得非常容易,而无需手动编写大量文档。Python 类型提示:FastAPI 的突出功能之一是它使用 Python 类型提示。...通过使用类型提示注释函数参数和返回类型,不仅可以提高代码可读性,还可以使 FastAPI 自动验证传入数据并生成准确的 API 文档。此功能使我们的代码不易出错并且更加自我记录。...FastAPI的优势以下是使用 FastAPI 的简单优点:易于学习和使用: FastAPI 的设计简单明了,特别是对于 Python 开发人员而言。...这意味着您的 Web 应用程序可以处理大量请求而不会减慢速度。自动数据验证:借助 FastAPI,您可以使用 Python 类型提示来定义 API 请求和响应所需的数据结构。

    67010

    FastAPI学习-2.路径参数

    所以,如果你运行示例并访问 http://127.0.0.1:8000/items/foo,将会看到如下响应: {"item_id":"foo"} 有类型的路径参数 你可以使用标准的 Python 类型标注为函数中的路径参数声明类型...所以,FastAPI 通过上面的类型声明提供了对请求的自动”解析”。...预设值 如果你有一个接收路径参数的路径操作,但你希望预先设定可能的有效参数值,则可以使用标准的 Python Enum 枚举类型 创建一个 Enum 枚举类,导入 Enum 并创建一个继承自 str 和...然后使用你定义的枚举类(ModelName)创建一个带有类型标注的路径参数: async def get_model(model_name: ModelName): 因为已经指定了路径参数的可用值,所以交互式文档可以恰当地展示它们...这可能是 FastAPI 与其他框架相比主要的明显优势(除了原始性能以外)。

    56410

    FastAPI(30)- Classes as Dependencies 类依赖注入

    commons 得到一个 dict,但 IDE 并不支持更多的代码智能提示,因为无法知道键、值的类型 灵魂提问:怎么才算一个依赖项?...中的 Callable 教程 面向对象 __call__() 教程 看看 Depends() 的源码 第一个参数依赖项类型是 Callable,必须是可调用对象 类作为依赖项 类是可调用对象吗?...,需要根据 __init__() 的参数列表来传参 请求数据将会传递到类的初始化方法中( __init__ ) commons 参数接收的值类型就是 CommonQueryParams 正确传参的请求结果...Depends(CommonQueryParams) commons = Depends(CommonQueryParams) 标准写法是第二种 但推荐第一种,它是第二种写法的缩写 不推荐第三种,因为参数没有指定类型...__int__ 方法有参数的类型是 Dict、List 的栗子 from typing import List, Dict, Any, Optional from fastapi import Depends

    79030

    实现函数的输入输出参数的强类型检验

    使用FastAPI的体验都比较清楚,在FastAPI中,接口的输入输出参数是可以定义成强类型的,这也是自己最初看到FastAPI就觉得这就是Python当前最好的框架之一。...总结一下,我们的实现方式应该做到如下两个要求: 非侵入式的,尽量避免对业务代码的更改; 实现输入输出参数的强类型校验。 参考FastAPI的实现,我们的实现应该也是采用包装器的形式来实现。...(): if key not in support_params: raise Exception(f"工具{tool_key}不支持参数: {key...相比原来的方式输入,个人更喜欢将参数定义成这样,类似FastAPI,后面可以作为对象使用,避免低级错误,例如写错变量名等。...输出参数校验的时候,没有参考FastAPI使用一个“response_model”之类的包装器参数,而是使用更加直接的方式。

    84321

    Django框架:优缺点、实用场景及与Flask、FastAPI的对比

    在本文中,我们将探讨Django的get和post请求、优缺点、实用场景以及与Flask、FastAPI的对比。...视图函数可以使用get和post请求来接收和处理数据,这些数据可以是URL参数、请求体参数或查询字符串参数。...Django与FastAPI的对比 FastAPI是一个性能强大的Python Web框架,以下是与Django的对比: 性能:FastAPI比Django更快,因为它是基于异步I/O操作的。...类型提示和文档生成:FastAPI提供了类型提示和自动文档生成功能,使得API的编写变得简单方便,而Django则需要使用第三方库来实现这些功能。...数据验证和转换:FastAPI使用Pydantic库进行数据验证和转换,可以帮助开发者在编写API时减少出错的可能;Django则需要手动编写数据验证和转换的代码。

    3.2K30

    FastAPI(64)- Settings and Environment Variables 配置项和环境变量

    大多数这些设置都是可变的(可以更改),例如数据库 URL,很多可能是敏感数据,比如密码 出于这个原因,通常在应用程序读取的环境变量中提供它们 Pydantic Settings Pydantic 提供了一个很好的实用程序来处理环境变量的设置...可以使用和 Pydantic Model 的所有相同验证功能和工具,例如不同的数据类型和使用 Field() #!...开头的文件是类 Unix 系统(如 Linux 和 macOS)中的隐藏文件 但是 dotenv 文件实际上不必具有那个确切的文件名 Pydantic 支持使用外部库读取这类型的文件 安装第三方库 pip...@lru_cache() 修改它修饰的函数返回与第一次返回相同的值,而不是再次执行函数内部代码 因此,它下面的函数将针对每个参数组合执行一次 然后,每当使用完全相同的参数组合调用函数时,每个参数组合返回相同的值将一次又一次地使用...Rick 使用完全相同的参数调用函数时,直接返回结果而不会执行厘米的代码 原理图

    2.7K30
    领券