Skip to content

Unfazed Request

unfazed 继承了 starlette 的 request,默认 endpoint 函数中第一个参数为 request: HttpRequest,其包含了请求的所有信息,请求的信息全部来自于 scope 。

签名

request = HttpRequest(scope: dict, receive: Callable = None)

基本用法


# endpoints.py
import typing as t
from unfazed.http import HttpRequest, HttpResponse


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

请求信息

HttpRequest 包含了请求的所有信息,包括

Method

可以通过 request.method 获取请求的方法。

URL

URL 包含了请求的 URL 信息,通过 request.url 获取。在 URL 对象中包含了以下信息

  • request.url.scheme
  • request.url.netloc
  • request.url.path
  • request.url.port
  • request.url.query
  • request.url.fragment
  • request.url.username
  • request.url.password
  • request.url.hostname
  • request.url.is_secure

unfazed / app

request 包含了当前的 app 对象,可以通过 request.app 或者 request.unfazed 获取。

Client

Client 包含了请求的客户端信息,通过 request.client 获取,包含

  • request.client.host
  • request.client.port

State

State 包含了请求的状态信息,配合 lifespan 使用,通过 request.state 获取。

参考 lifespan

Headers

Headers 包含了请求的头信息,通过 request.headers 获取,在实际的项目中,建议通过 unfazed 推荐的参数化方式获取头信息。

参考 endpoint



class Hdr1(BaseModel):
    header1: str
    header2: int = Field(default=1)


async def endpoint(
    request: HttpRequest,
    hdr1: t.Annotated[Hdr1, p.Header()],
) -> JsonResponse:

    return JsonResponse({})


直接获取可以通过 request.headers.get("header1")

Query Parameters

Query Parameters 包含了请求的查询参数,通过 request.query_params 获取,在实际的项目中,建议通过 unfazed 推荐的参数化方式获取query信息。

参考 endpoint



class Qry1(BaseModel):
    query1: str
    query2: int = Field(default=1)

async def endpoint2(
    request: HttpRequest,
    qry1: t.Annotated[Qry1, p.Query()],
) -> JsonResponse:
    return JsonResponse({})


直接获取可以通过 request.query_params.get("query1")

Path Parameters

Path Parameters 包含了请求的路径参数,通过 request.path_params 获取,在实际的项目中,建议通过 unfazed 推荐的参数化方式获取path信息。

参考 endpoint


class Pth1(BaseModel):
    path1: str
    path2: int = Field(default=1)



async def endpoint1(
    request: HttpRequest,
    pth1: t.Annotated[Pth1, p.Path()],
) -> JsonResponse:

    return JsonResponse({})

直接获取可以通过 request.path_params.get("path1")

Cookies

Cookies 包含了请求的 cookie 信息,通过 request.cookies 获取,在实际的项目中,建议通过 unfazed 推荐的参数化方式获取cookie信息。

参考 endpoint





class Ckie1(BaseModel):
    cookie1: str
    cookie2: int = Field(default=1)



async def endpoint4(
    request: HttpRequest,
    ck1: t.Annotated[Ckie1, p.Cookie()],
) -> JsonResponse:
    return JsonResponse({})


直接获取可以通过 request.cookies.get("cookie1")

Body

Body 包含了请求的 body 信息,通过 await request.json() 或者 await request.form() 获取,在实际的项目中,建议通过 unfazed 推荐的参数化方式获取body信息。

参考 endpoint



class Body1(BaseModel):
    body1: str
    body2: int = Field(default=1)


async def endpoint5(
    request: HttpRequest,
    bd1: t.Annotated[Body1, p.Json()],
) -> JsonResponse:
    return JsonResponse({})



class Form1(BaseModel):
    form1: str
    form2: int = Field(default=1)


async def endpoint6(
    request: HttpRequest,
    form1: t.Annotated[Form1, p.Form()],
) -> JsonResponse:
    return JsonResponse({})

直接获取可以通过 await request.json().get("bd1") 或者 await request.form().get("frm1")

Files

Files 包含了请求的文件信息,通过 await request.form() 获取,在实际的项目中,建议通过 unfazed 推荐的参数化方式获取文件信息。


from unfazed.file import UploadFile

async def endpoint19(
    request: HttpRequest,
    file1: t.Annotated[UploadFile, p.File()],
) -> JsonResponse:
    return JsonResponse({})