Skip to content

Unfazed Response

Unfazed 包含了一系列的 HttpResponse 类,用于处理请求的返回值,unfazed 要求所有的 endpoint 返回值都是 HttpResponse 类型。

签名

resp = HttpResponse(content: Any, status: int = 200, headers: Optional[Dict[str, str]] = None, media_type: str = None)

HttpResponse 类型

基本的使用代码如下


from unfazed.http import HttpResponse, HttpRequest

async def endpoint(request: HttpRequest) -> HttpResponse:
    return HttpResponse(content="Hello, World!")

HttpResponse 类型包含了以下几种类型

  • PlainTextResponse
  • HtmlResponse
  • JsonResponse
  • RedirectResponse
  • StreamingResponse
  • FileResponse

以下是每种类型的详细介绍。

PlainTextResponse

使用 PlainTextResponse 返回纯文本内容。


from unfazed.http import PlainTextResponse, HttpRequest

async def endpoint(request: HttpRequest) -> PlainTextResponse:
    return PlainTextResponse(content="Hello, World!")

HtmlResponse

使用 HtmlResponse 返回 HTML 内容。


from unfazed.http import HtmlResponse, HttpRequest

async def endpoint(request: HttpRequest) -> PlainTextResponse:
    return HtmlResponse(content="<h1>hello, world</h1>")

JsonResponse

JsonResponse 可以处理 DictListBaseModel 类型的数据。


from unfazed.http import JsonResponse, HttpRequest
from pydantic import BaseModel

async def endpoint1(request: HttpRequest) -> JsonResponse:
    return JsonResponse(content={"hello": "world"})


async def endpoint2(request: HttpRequest) -> JsonResponse:
    return JsonResponse(content=[{"hello": "world"}])


class User(BaseModel):
    name: str
    age: int

async def endpoint3(request: HttpRequest) -> JsonResponse:
    return JsonResponse(User(name="foo", age=20))


RedirectResponse

RedirectResponse 用于重定向。


from unfazed.http import RedirectResponse, HttpRequest

async def endpoint(request: HttpRequest) -> RedirectResponse:
    return RedirectResponse(url="/api")

StreamingResponse

StreamingResponse 用于处理流式数据。


import typing as t
from unfazed.http import StreamingResponse, HttpRequest

async def asynccontent() -> t.AsyncGenerator[bytes, None]:
        yield b"hello, "
        yield b"world"

async def endpoint(request: HttpRequest) -> RedirectResponse:
    resp = StreamingResponse(content=asynccontent())
    return resp


FileResponse

FileResponse 用于处理文件下载,FileResponse 内置自动支持断点下载。


from unfazed.http import FileResponse, HttpRequest


async def endpoint(request: HttpRequest) -> RedirectResponse:
    file_path = "/path/to/file"
    resp = FileResponse(file_path)
    return resp