如何使用 Starlette 框架处理 JSON 请求体
How to handle JSON request body with the Starlette framework
我正在将我的 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 使用的语法的任何帮助都会非常有帮助,因为我无法从文档中弄清楚。
谢谢!
Starlette tests 有一个从请求中读取 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)
例如
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']
我正在将我的 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 使用的语法的任何帮助都会非常有帮助,因为我无法从文档中弄清楚。
谢谢!
Starlette tests 有一个从请求中读取 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)
例如
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']