3

我正在将我的 API 框架从旧版本的 ApiStar 移动到 Starlette,并且在我路由到的函数中无法正确访问 HTTP 主体,在这种情况下,它是 JSON 有效负载。

这就是 ApiStar 对我有用的东西:

from apistar import http
import json

def my_controller(body: http.Body):

    spec = json.loads(body)

    print(spec['my_key_1'])
    print(spec['my_key_2'])

基本上将上述内容转换为 Starlett 使用的语法的任何帮助都会非常有帮助,因为我无法从文档中弄清楚。

谢谢!

4

2 回答 2

1

Starlette测试有一个从请求中读取 JSON 的示例。

    async def app(scope, receive, send):
        request = Request(scope)
        try:
            data = await request.json()
            print(data['my_key_1'])
        except RuntimeError:
            data = "Receive channel not available"
        response = JSONResponse({"json": data})
        await response(scope, receive, send)
于 2019-03-08T16:38:33.863 回答
0

例如

async def user_login(request: Request) -> JSONResponse:

    try:
        payload = await request.json()
    except JSONDecodeError:
        sprint_f('cannot_parse_request_body', 'red')
        raise HTTPException(status_code=HTTP_400_BAD_REQUEST, detail="cannot_parse_request_body")
    email = payload['email']
    password = payload['password']
于 2020-04-29T04:07:59.377 回答