如何使用Starlette框架处理JSON请求正文

时间:2019-02-25 19:03:44

标签: python-3.x rest payload starlette

我将我的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所使用的语法的帮助都将非常有帮助,因为我无法从文档中找出来。

谢谢!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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']