FastAPI学习日记————Day02 1. 认识FastAPI1.1 什么是FastAPIFastAPI就是一个现代化的web框架他基本上的工作流程我总结了一个例子我通过网页来发送 http 请求比如我想搜索一个新闻然后我发送了一个搜新闻的 http 请求fastapi 接收到了我这个请求分离出了我请求里面的地址然后运行 fastapi 里面的函数然后生成信息最后包装成 http 响应在把 http 响应回到网页网页通过这个 http 响应打印出 fastapi 里面的信息给我看这就是FastAPI的大体流程!1.2 基础代码认识和Hello Worldfrom fastapi import FastAPI # 1. 实例化 FastAPI 对象 app FastAPI() # 2. 路径操作装饰器 # 含义当客户端以 GET 方法访问根路径 / 时运行下方的函数 app.get(/) async def read_root() - dict: # 3. 路径操作函数 # 直接返回字典FastAPI 会自动转换为 JSON return {message: Hello World}app FastAPI() 创建一个FastAPI的操作对象.get HTTP方法见上一个博客有四种方法分别对应增删改查/请求路径async异步处理函数一般fastapi都使用异步处理函数还有一个await关键字也很重要运行后可以在 http://127.0.0.1:8000/docs 中可视化的操作你的fastapi页面2. FastAPI的核心交互————请求交互重点2.1 路径参数Path Parameters路径参数就是写在上面 / 这个请求路径里面用于去定位所需要的资源比如说你想要去第几本书或者想看第几个新闻你就可以输入路径参数来定位你想要的信息#路径参数代码实例查找图书 app.get(/book/{book_id}) async def get_book(book_id: int): return f你找到了第{book_id}本书打开 http://127.0.0.1:8000/book/参数 这个参数就是路径参数输入你想要的“书号”你就可以得到你想找的“书”2.2 查询参数Query Parameters参数声名在函数参数中但是不在路径中的参数就是查询参数。最后会出现在URL中后搜索 翻页—— 这是查询参数最典型的应用场景。生活化例子搜索图书网址长这样/search?keywordPythonpage2size10?后面就是查询参数keywordPython、page2、size10多个参数用连接。含义是搜 Python 关键词看第 2 页每页 10 条。#搜索参数代码实例翻页和查找 app.get(/page) async def get_page(keyword:str , page: int, limit:int 10): # limit :int 10 代表一页最多显示10行信息所以提前赋值. # 但是你想看多少页page和你想看什么类型的书keyword现在不知道所以只定义数据类型不赋值 return {关键词: keyword, 页码: page, 每页条数: limit}这个keyword和page的值就是需要你在网页上去输入的值了这里只提供一个数据接口。2.3 请求体核心结论路径参数 告诉服务器 找哪本书资源身份查询参数 告诉服务器 怎么筛、看多少筛选 分页请求体 你递给服务器的 借书申请单要提交 / 写入的具体内容。对应图书馆场景路径参数说 我要借 123 号书请求体说 借给张三、借 7 天。为什么需要请求体因为路径和查询都在 URL 上有长度限制、会留在日志里、也放不下复杂结构。要传 一本书的完整信息、一份订单、一段文章正文 这种复杂数据就得放到请求体里 —— 它更安全可加密、容量更大、格式更自由JSON/XML/ 文件都行。请求体位置HTTP请求的消息体body中作用创建更新资源携带大量数据操作POST PUT等from fastapi import FastAPI from pydantic import BaseModel from typing import Optional app FastAPI() # 1. 定义数据模型 class Item(BaseModel): name: str price: float is_offer: bool None # 可选字段默认为 None description: Optional[str] None# 将模型作为类型提示用于参数 tax: Optional[float] None price_with_tax: Optional[float] None app.post(/items/) async def create_item(item: Item):# item 此时已经是 Item 类的实例拥有属性提示 item_dict item.model_dump()#这一步就是把复杂的 Pydantic 对象转成简单的字典以便 FastAPI 自动处理和返回。 if item.tax: price_with_tax item.price item.tax item_dict.update({price_with_tax: price_with_tax}) #item_dict[price_with_tax] price_with_tax return item_dict首先数据体一定要先定义一个数据模型然后在创建函数在函数参数中放入你模型的实例item_dict item.model_dump()这一步是Pydantic v2 方法转成纯 dict然后用item_dict接收这个dict方便接下来的.update操作因为dict的操作比Item这个实例模型更加方便2.4 参数限制2.4.1 PATH参数PATH是用于限制路径参数的条件例如下面的代码#路径参数代码实例查找图书 app.get(/book/{book_id}) async def get_book(book_id: int Path(...,gt0,description这是书的编号必须要大于0)): #Path格式--()中。。。必填gt表示大于description是添加的描述信息 return f你找到了第{book_id}本书2.4.2 Query参数Query是用于限制查询参数的条件例如#查询参数代码实例翻页和查找 app.get(/page) async def get_page( keyword:str Query(None,min_length2,max_length200), #Query(默认值关键字的最短长度2最大长度200) page: int Query(None,gt0), #Query(默认值page要大于0) limit:int Query(10), #Query(默认值为10) ): return {关键词: keyword, 页码: page, 每页条数: limit}2.4.3 Field参数前两个参数都是从fastapi中导包的但是Field参数是在pydantic包中这个参数是用来限制请求体的限制的是请求体里创建的数据模型的参数例如#请求体示例 class User(BaseModel): name: str Field(clark,min_length2,max_length200) #Field(默认值为clark,这个最短长度为2 min_length2,max_length200) role: str language: str app.post(/test) async def test(user: User)-dict: tes user.model_dump() tes.update({name:jack,role:student,language:python,gender:male}) return tes