【后端开发】FastAPI基础 2026.6.21一、代码1.导包fromfastapiimportFastAPI# from ... import ...手动配置的方法终端输入确保终端提示符前有 (.venv) 标记pip install fastapi uvicorn2.创建实例FastAPI实例appappFastAPI()3.定义接口app.get(/)# 访问路径为根asyncdefroot():# async ---异步函数return{message:Hello World}app.get(/hello/{name})asyncdefsay_hello(name:str):return{}二、运行浏览器中访问接口1.运行方法run按钮停止运行stop下方左上角红色正方形按钮命令行打开终端terminal确保终端位置是当前根目录输入命令uvicorn main:app--reload# uvicorn 文件名:fastapi实例名 --reload最好加上uvicornfastapi高性能的服务器用来运行fastapi项目–reload表示修改代码后自动重启服务器开启热重载当文件改变之后自动重启下服务器载入改动CTRLC停止运行可按上键进行代码修改按回车再运行注run按钮修改代码后记得ctrls保存才能达到–reload同样效果自动重启服务2.可交互式文档fastapi项目运行后可自动生成可交互式文档访问方式 /docs三、路由作用访问不同地址拿到不同结果路由是URL地址和处理函数之间的映射关系它决定了当用户访问某个特定地址时服务器应执行哪段代码来返回结果。映射在两个东西之间建立一种明确的对应关系输入A一定会输出BFastAPI的路由定义基于Python的装饰器模式app.get(/)# FastAPI实例.请求方法(请求路径)asyncdefroot():# 执行root函数return{message:Hello World}# 返回值--响应结果动手实操# 访问/hello 响应结果 msg: 你好 fa一下app.get(/hello)# 装饰器 括号内-请求路径asyncdefhello_fa():return{msg:你好fa一下}# 处理函数对象-键值对格式运行默认访问根路径在后面加上/hello访问该路由。可交互式文档中也有。四、参数同一接口参数不同返回不同结果实现了接口的动态交互。1.路径参数位置URL路径的一部分 eg. /book/{id} 定义了id参数作用指向唯一的、特定的资源方法GET请求路径中{}定义处理函数内加同名形参路径参数值传入处理函数同名形参app.get(/book/{id})# 定义路径参数idasyncdefget_book(id:int):# 同名形参:int类型注解-约定参数类型return{id:id,title:f这是第{id}本书}用户传入的值会出现在URL路径的位置类型注解 PathFastAPI允许为参数声明额外的信息和校验导入FA的Path函数fromfastapiimportFastAPI,Path# 导入在原生类型注解基础上赋值Path函数括号内添加参数… 必填gt/ge 大于/大于等于lt/le 小于/小于等于description 描述min_length max_length 长度限制app.get(/book/{id})asyncdefget_book(id:intPath(...,)):# 赋值Path函数return{id:id,title:f这是第{id}本书}2.查询参数对大量数据进行过滤…获取数据。不需要在路径上定义参数直接在处理函数中添加形参自动解释为查询参数赋形参默认值声明的参数不是路径参数路径操作函数会把该参数自动解释为查询参数位置URL?之后拼接规则参数名key参数值value拼接作用对资源集合进行过滤、排序、分页等操作方法GET# 查询新闻 分页功能 skip:跳过的记录数limit:返回的记录数app.get(/news/news_list)asyncdefget_news_list(skip:int,limit:int10):return{skip:skip,limit:limit}查询参数额外类型注解 Query导入Query()fromfastapiimportQueryapp.get(/news/news_list)asyncdefget_news_list(skip:intQuery(...),limit:int10):return{skip:skip,limit:limit}3.请求体参数实际要发送到服务器的数据比前两个参数直接拼接到URL中相比更安全。HTTP协议中一个完整的请求由三部分组成1.请求行方法、URL、协议版本2.请求头元数据信息内容类型3.请求体实际要发送的数据内容位置HTTP请求的消息体(body)中作用创建、更新资源方法POST、PUT等 post向服务器提供数据定义类型继承 BaseModel自动获得验证能力pydantic强制验证类型fromfastapiimportBaseModelclassUser(BaseModel):# User继承BaseModelusername:str# 数据属性和类型password:str类型注解app.get(/register})asyncdefregister(user:User):# 参数: 类型名returnuser则发请求传递参数时按定义好的类型传递在-d里body![[Pasted image 20260512210739.png]]类型注解 Field函数在pydantic中1.导入frompydanticimportBaseMode,Field2.原基础上Field(…)classUser(BaseModel):username:strField(...)password:strField(...)参数newdefault 默认值五、请求与响应1.响应类型fastapi默认支持JSON格式2.响应类型设置方式装饰器中指定响应类场景固定返回类型HTML、纯文本在请求路径,response class 赋值响应类导入需要的类型请求路径后fromfastapi.responsesimportHTMLResponseapp.get(/html,response_classHTMLResponse)asyncdefget_html():returnh1hello ctf/h1返回响应对象直接return场景文件下载、图片、流式响应逐步返回或不确定响应类型returnFileResponse()导入fromfastapi.responsesimportFileResponseapp.get(/file)asyncdefget_file():file_path./file/1.png# jpeg?returnFileResponse(file_path)响应文件对象给客户端3.自定义响应数据格式当一个接口响应的数据格式是JSON时可以自定义一个数据格式【类】用类约定响应的数据包含哪些属性用什么类型。app.get(/news/{id})asyncdefget_news(id:int):return{id:id,:,}固定接口返回数据格式。用自定义类来约束响应的数据格式。给路径装饰器加参response_model路径操作装饰器的关键参数它通过一个Pydantic模型来严格定义和约束API端点的输出格式。接口得听这个类型的话。frompydanticimportBaseModelclassNews(BaseModel):# 1. 准备一个基于pydantic的类id:inttitle:strcontent:strapp.get(/news/{id},response_modelNews)# 这个接口听这个类的话 装饰器加参数response_model类名asyncdefget_news{id:int}:return{id:idtitle:{第{id}本书}content:good}此接口响应的数据格式只能是news类型如果不是就会直接报错。# 需求新闻接口 - 响应数据格式 id、title、content# 约定数据格式——先定义类型frompydanticimportBaseModel appFastAPI()classNews(BaseModel)# 子承父业id:inttitle:strcontent:strapp.get(/news/{id},response_modelNews)# 设置数据格式 路径装饰器加参asyncdefget_news(id:int):# 路径参数 同名形参return{id:id,title:f第{id}本书,content:good}![[Pasted image 20260521011140.png]]这一机制在提供自动数据验证和序列化的同时更是保障数据安全性的第一道防线。4.异常响应处理对于客户端引发的错误应使用 fastapi.HTTPException 来中断正常处理流程并返回标准错误响应。判断异常raise抛出HTTPException(status_code …)fromfastapiimportFastAPI,HTTPException# 1. 导包app.get(/news/{id})asyncdefget_news(id:int):id_list[1,2,3,4,5,6]ifidnotinid_list:# 按需求写判断条件判断异常raiseHTTPException(status_code404,detail滚木id喵)# 必填参数-状态码 可选参数return{id:id}# JSON形式响应客户端# 需求按id查询新闻 1~6# 1.导包fromfastapiimportFastAPI,HTTPException appFastAPI()app.get(/news/{id})# 路径参数指向唯一特定的资源asyncdefget_news(id:int)# 路径参数-同名形参id_list[1,2,3,4,5,6]ifidnotinid_list:raiseHTTPException(status_code404,detail滚木滚木)return{id:id}正常返回键值对异常返回detail