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

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

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

83410

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】 正确传参请求结果

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

全面拥抱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.3K30

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

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

2.7K30

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

2K20

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没有这个功能,需要手动编写数据验证和转换代码。

1.5K30

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 那我们我们在写时候,有对应状态码以及代表含义。我们可以根据对应需求,去改变对应状态码。

94560

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.1K21

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

49130

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 与其他框架相比主要明显优势(除了原始性能以外)。

21510

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

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

1.7K30

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

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

2.1K20

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

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

17321

FastAPI框架诞生缘由(下)

可能是由于它文档过于简洁、抽象。 它解决了无需在 Python文档字符串内编写YAML(另一种语法)。...由于参数由 TypeScript 类型(就像 Python 类型提示一样)描述,对编辑器支持是相当不错。...它被设计为具有接收两个参数函数,一个“请求”和一个“响应”。然后,您从请求中“读取”部分,并将“部分”“写入”响应。由于这种设计,不可能用标准Python类型提示将请求参数和主体声明为函数参数。...Hug Hug 是最早使用 Python 类型提示实现API参数类型声明框架之一。这是一个好主意,启发了其他工具也这样做。...Hug 启发了 FastAPI 使用 Python 类型提示来声明参数,并自动生成定义 API 模式。

2.3K20

FastAPI(19)- Response Model 响应模型

前言 前面文章写这么多路径函数最终 return 都是自定义结构字典 FastAPI 提供了 response_model 参数,声明 return 响应体模型 什么是路径操作、路径函数 # 路径操作...因为路径函数返回值并不是固定可能是 dict、数据库对象,或其他模型 但是使用响应模型可以对响应数据进行字段限制和序列化 区分请求模型和响应模型栗子 需求 假设一个注册功能 输入账号、密码、昵称...password FastAPI 通过 Pydantic 过滤掉所有未在响应模型中声明数据 正确传参请求结果 查看 Swagger API 文档 来看看路径操作有什么关于响应模型参数 response_model_exclude_unset...、response_model_exclude 作用 include:包含 exclude:排除 其实就是响应模型只要包含/排除有些属性 参数数据类型 从上面可以看到,这两个参数类型都是 Optional...int、str,值类型可以是任意类型 DictIntStrAny = Dict[Union[int, str], Any] 官方建议 不推荐使用这两个参数,而推荐使用上面讲到思想,通过多个类来满足请求模型

1.2K40

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

在开发接口或者服务时候,经常会遇到需要给客户端返回异常错误 例如: 用户操作权限不够 参数错误 请求资源不存在.....众所周知,因客户端或调用方原因导致出错,返回状态码是以 4 开头 (400~499) 比如常见 404 Not Found, 资源不存在......为了直观友好给客户端返回错误, 在 FastApi 中一般使用 HTTPException from fastapi import FastAPI, HTTPException app = FastAPI...int 类型路径函数 @app.get("/items/{item_id}") async def read_item(item_id: int):     if item_id == 3:         ...return {"item_id": item_id} 当从客户端传过来 item_id 为非 int 类型时候,便返回默认 JSON 响应 你可以重写这些默认异常处理类,变成自定义

1.8K40

fastapi 响应模型 响应状态码 表单参数

响应模型编码参数 response_model_exclude_unset 参数 True,输出忽略 未明确设置 字段 response_model_exclude_defaults=True,忽略跟默认值一样字段...Union 响应将是 多种类型 任何一种 from typing import Optional, Union class BaseItem(BaseModel): description:...任意 dict 响应 对于事先不知道 key ,可以直接定义字典及其 k, v 类型 @app.get("/keyword-weights/", response_model=Dict[str,...具有这些状态码响应可能有或者可能没有响应体,但 304「未修改」是个例外,该响应不得含有响应体。 400 及以上状态码用于「客户端错误」响应。这些可能是你第二常使用类型。...表单参数 接收不是 JSON,而是表单字段时,要使用 Form from fastapi import FastAPI, Form app = FastAPI() @app.post("/login

83230

FastAPI从入门到实战(12)——错误处理

中导入HTTPException,并在路径操作函数中进行判断输出即可; 上面的代码就是当输入id不为MinChess时候抛出错误,错误代码为404,详细信息为not found 添加自定义响应头...HTTP错误中添加一些自定义响应头,添加方法如上,直接设置HTTPExceptionheaders即可; 自定义异常处理器 定义一个Exception类型错误类UnicornException...traceback.format_exc()}") return PlainTextResponse(str(exc.detail), status_code=exc.status_code) 上面的第一个函数就是重写参数校验处理器...; 参数校验 这部分不需要重新写操作函数,找到之前写某一个请求,发送错误类型错误就会抛出异常: HTTPException @app08.get("/stu08/Request_Validation_Error...( # 创建一个FastAPI实例\这里变量 app 会是 FastAPI一个「实例」。

1.5K10
领券