大家好我是Java1234_小锋老师最近更新《2027版 一天学会 FastAPI Python web开发 视频教程(无废话版)》专辑感谢大家支持。本课程主要介绍和讲解FastAPI简介HelloWorld实现自动生成交互式API文档路径参数查询参数请求体参数校验响应模型 表单数据和模型中间件依赖注入集成SQLAlchemy ORM 操作数据库集成Pydantic数据校验等视频教程课件源码打包下载链接https://pan.baidu.com/s/1_NzaNr0Wln6kv1rdiQnUTg提取码0000表单数据与模型当你需要接收表单字段而不是 JSON 时可以使用Form使用Form之前需要先安装python-multipartpip install python-multipart --trusted-host pypi.tuna.tsinghua.edu.cn我们来看一个实例class FormData(BaseModel): username: str password: str app.post(/login/) async def login(data: Annotated[FormData, Form()]): return data然后打开浏览器访问http://127.0.0.1:8000/docs进行测试注意这里请求信息类型已经是form表单类型了。之前测试案例是json请求表单与文件FastAPI 支持同时使用File和Form定义文件和表单字段。文件类型有两种分别是bytes 整个文件一次性读进内存和UploadFile 文件流式上传适合大文件我们看一个实例app.post(/files/) async def create_file( file: Annotated[bytes, File()], # 整个文件一次性读进内存 fileb: Annotated[UploadFile, File()], # 文件流式上传适合大文件 token: Annotated[str, Form()], ): return { file_size: len(file), # 获取文件大小 token: token, # 获取表单参数 fileb_content_type: fileb.content_type, # 获取文件类型 }然后打开浏览器访问http://127.0.0.1:8000/docs进行测试响应类型 - 返回文件类型在FastAPI中除了默认的JSON响应你可以通过response_class参数或直接返回特定的响应对象来灵活地返回HTML、文件、纯文本、流媒体等各种类型的内容。 响应类型设置方式在FastAPI中主要有两种方式来指定非JSON的响应类型通过 response_class 参数声明在路由装饰器如app.get()中使用response_class参数可以声明该接口的响应媒体类型。这会在OpenAPI文档中自动生成相应的说明。直接返回响应对象在路径操作函数中直接实例化并返回一个具体的响应对象如FileResponse、StreamingResponse。这种方式更加灵活适用于需要动态决定响应类型的场景。 常用响应类型介绍与实例1返回HTML内容实例app.get(/home, response_classHTMLResponse) async def get_home(): return h1Hello, World!/h1然后打开浏览器访问http://127.0.0.1:8000/docs进行测试返回的是html文件类型2返回File文件实例app.get(/file) async def get_file(): return FileResponse(./files/苹果.png)然后打开浏览器访问http://127.0.0.1:8000/docs进行测试返回的是image文件类型3返回流式文件实例app.get(/stream-file) async def stream_large_file(): file_path ./files/苹果落地视频.mp4 media_type, _ mimetypes.guess_type(file_path) # 获取文件类型 def iterfile(): with open(file_path, rb) as file_like: # 每次读取 1MB 并 yield 出去 while chunk : file_like.read(1024 * 1024): # 1024 * 1024 1MB yield chunk # yield yield 是 Python 中用来定义生成器Generator 的关键字。它可以让一个函数“暂停”并“记住”当前的状态 filename quote(os.path.basename(file_path)) # 对文件名进行 URL 编码 return StreamingResponse( iterfile(), media_typemedia_type or application/octet-stream, headers{Content-Disposition: fattachment; filename*UTF-8{filename}}, )然后打开浏览器访问http://127.0.0.1:8000/docs进行测试返回的是流媒体文件类型4请求重定向app.get(/redirect) async def redirect(): return RedirectResponse(urlhttps://python222.java1234.com/)请求http://localhost:8000/redirect,直接跳转https://python222.java1234.com/以下是一个完整的清单包含了用途和入门实例 FastAPI 响应类型清单与实例响应类型用途入门实例 (代码片段)JSONResponse默认响应类型自动将字典、列表等 Python 对象转换为 JSON 格式。pythonbrfrom fastapi.responses import JSONResponsebrbrapp.get(/json)brasync def get_json():br # 直接返回字典FastAPI 会自动使用 JSONResponsebr return {message: Hello World}br # 或者显式返回 JSONResponse 对象br # return JSONResponse(content{message: Hello World})brHTMLResponse返回 HTML 内容浏览器会将其渲染为网页。pythonbrfrom fastapi.responses import HTMLResponsebrbrapp.get(/html, response_classHTMLResponse)brasync def get_html():br html_content br htmlbodyh1Hello, FastAPI!/h1/body/htmlbr br return html_contentbrPlainTextResponse返回纯文本内容。pythonbrfrom fastapi.responses import PlainTextResponsebrbrapp.get(/text, response_classPlainTextResponse)brasync def get_text():br return This is a plain text response.brFileResponse返回文件如图片、PDF供下载或预览。异步读取整个文件适合大小适中的文件。pythonbrfrom fastapi.responses import FileResponsebrbrapp.get(/image)brasync def get_image():br # 返回图片文件浏览器会直接显示或下载br return FileResponse(path/to/your/image.png)br# 也可以自定义下载文件名和MIME类型 app.get(/download) async def download_file(): return FileResponse(path/to/file.pdf, filenamecustom_name.pdf, media_typeapplication/pdf)StreamingResponse流式传输大文件、实时数据等。逐块读取和发送数据内存占用低适合大文件或动态生成的内容。pythonbrfrom fastapi.responses import StreamingResponsebrbrapp.get(/large-file)brasync def stream_large_file():br def iterfile(): # 定义一个生成器函数br with open(large_file.zip, moderb) as file_like:br yield from file_like # 逐块读取并产出数据br return StreamingResponse(iterfile(), media_typeapplication/zip)brRedirectResponse将请求重定向到另一个 URL。pythonbrfrom fastapi.responses import RedirectResponsebrbrapp.get(/old-page)brasync def redirect():br return RedirectResponse(urlhttps://example.com/new-page)brORJSONResponse一个高性能的 JSON 响应类使用orjson库进行序列化。pythonbrfrom fastapi.responses import ORJSONResponsebrbrapp.get(/orjson, response_classORJSONResponse)brasync def get_orjson():br return {data: This is serialized by orjson}br注意需要先安装orjson(pip install orjson)。