首页 > 解决方案 > Python:带有发布请求的 FastAPI 错误 422

问题描述

我正在构建一个简单的 API 来测试数据库。当我使用 get request 时,一切正常,但是如果我更改为 post,我会收到“无法处理的实体”错误:

这是 FastAPI 代码:

from fastapi import FastAPI

app = FastAPI()

@app.post("/")
def main(user):
    return user

然后,我的请求使用 javascript

let axios = require('axios')

data = { 
    user: 'smith' 
}

axios.post('http://localhost:8000', data)
    .then(response => (console.log(response.url)))

也使用 Python

import requests

url = 'http://127.0.0.1:8000'
data = {'user': 'Smith'}

response = requests.post(url, json=data)
print(response.text)

我也尝试解析为 json,使用 utf-8 编码,并更改标题。没有什么对我有用。

标签: pythonpython-requestsaxiosfastapi

解决方案


直接来自文档

函数参数将被识别如下:

  • 如果参数也在path中声明,它将被用作路径参数。
  • 如果参数是单数类型(如 int、float、str、bool 等),它将被解释为查询参数。
  • 如果参数被声明为Pydantic 模型的类型,它将被解释为请求。”

因此,要创建一个接收带有用户字段的正文的 POST 端点,您可以执行以下操作:

from fastapi import FastAPI
from pydantic import BaseModel


app = FastAPI()


class Data(BaseModel):
    user: str


@app.post("/")
def main(data: Data):
    return data

推荐阅读