FastAPI支持的响应数据类型及案例

Python私教 2024-11-28 10:03:21

FastAPI是一个现代、快速的Web框架,它支持多种响应数据类型,使得开发者能够灵活地处理各种数据格式。以下是FastAPI支持的一些常见响应数据类型及其案例。

1. JSON格式

FastAPI默认返回JSON格式的数据。你也可以使用JSONResponse来返回JSON数据。

from fastapi import FastAPIfrom fastapi.responses import JSONResponseapp = FastAPI()@app.get("/json")def get_json():    return JSONResponse(content={"message": "Hello, World!"})

2. HTML格式

使用HTMLResponse可以返回HTML内容。

from fastapi import FastAPIfrom fastapi.responses import HTMLResponseapp = FastAPI()@app.get("/html", response_class=HTMLResponse)def get_html():    return """    <html>        <head>            <title>FastAPI HTML Response</title>        </head>        <body>            <h1>Hello, HTML!</h1>        </body>    </html>    """

3. 纯文本 (Plain Text) 格式

使用PlainTextResponse返回纯文本。

from fastapi import FastAPIfrom fastapi.responses import PlainTextResponseapp = FastAPI()@app.get("/text", response_class=PlainTextResponse)def get_text():    return "Hello, Plain Text!"

4. Markdown格式

虽然MarkdownResponse不直接存在,但可以先用markdown库将Markdown转换为HTML,然后使用HTMLResponse来返回。

from fastapi import FastAPIfrom fastapi.responses import HTMLResponseimport markdownapp = FastAPI()@app.get("/markdown", response_class=HTMLResponse)def get_markdown():    markdown_text = "# Hello, Markdown\nThis is some text in **Markdown**."    return HTMLResponse(content=markdown.markdown(markdown_text))

5. PDF格式

使用FileResponse返回PDF文件。

from fastapi import FastAPIfrom fastapi.responses import FileResponseapp = FastAPI()@app.get("/pdf", response_class=FileResponse)def get_pdf():    pdf_path = "/path/to/your/file.pdf"    return FileResponse(pdf_path, media_type='application/pdf', filename="your_file.pdf")

6. 图片格式 (Image)

使用FileResponse返回图片文件,例如PNG或JPG格式。

from fastapi import FastAPIfrom fastapi.responses import FileResponseapp = FastAPI()@app.get("/image", response_class=FileResponse)def get_image():    image_path = "/path/to/your/image.png"    return FileResponse(image_path, media_type='image/png', filename="image.png")

7. 文件下载 (任何文件)

使用FileResponse返回任意文件类型,用户可以下载。

from fastapi import FastAPIfrom fastapi.responses import FileResponseapp = FastAPI()@app.get("/download")def download_file():    file_path = "/path/to/your/file.zip"    return FileResponse(file_path, media_type='application/octet-stream', filename="file.zip")

8. 流式响应 (Streaming Response)

使用StreamingResponse返回流式数据,如大文件或音频、视频等。

from fastapi import FastAPIfrom fastapi.responses import StreamingResponsefrom io import BytesIOapp = FastAPI()def fake_video_stream():    for i in range(10):        yield f"Streamed line {i}\n"@app.get("/stream")def stream_video():    return StreamingResponse(fake_video_stream(), media_type="text/plain")

9. 重定向 (Redirect Response)

使用RedirectResponse实现URL重定向。

from fastapi import FastAPIfrom fastapi.responses import RedirectResponseapp = FastAPI()@app.get("/redirect")def redirect_example():    return RedirectResponse(url="/json")

10. XML格式

使用Response返回XML格式数据。

from fastapi import FastAPI, Responseapp = FastAPI()@app.get("/xml", response_class=Response)def get_xml():    xml_data = """    <note>        <to>User</to>        <from>FastAPI</from>        <heading>Reminder</heading>        <body>Don't forget to try XML!</body>    </note>    """    return Response(content=xml_data, media_type="application/xml")

11. CSV格式

使用Response返回CSV格式数据。

from fastapi import FastAPI, Responseapp = FastAPI()@app.get("/csv", response_class=Response)def get_csv():    csv_data = "name,age\nAlice,30\nBob,25"    return Response(content=csv_data, media_type="text/csv")

12. 二进制数据 (Binary Data)

使用Response返回二进制数据。

from fastapi import FastAPI, Responseapp = FastAPI()@app.get("/binary", response_class=Response)def get_binary():    binary_data = b"\x00\x01\x02\x03"    return Response(content=binary_data, media_type="application/octet-stream")

FastAPI的灵活性和强大的功能使其成为处理多种数据格式的理想选择。通过上述案例,我们可以看到FastAPI如何轻松地支持不同的响应数据类型,从而满足各种API开发需求。

0 阅读:0

Python私教

简介:全栈工程师,目标人工智能.抖音同理想国真恵玩.