python - 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 编码,并更改标题。没有什么对我有用。
解决方案
直接来自文档:
函数参数将被识别如下:
- 如果参数也在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
推荐阅读
- java - 使用杰克逊的 LocalDateTime 解析
- c - 如何在 char* 中输入值?
- django - 如何在 Django 的多个视图中实现基本表单?
- android - task.isSuccessful() 在signInWithEmailAndPassword 中总是给出假
- c - 如何编写一个名为 vowel 的函数返回非零 C 编程的程序(帮助!!)
- amazon-web-services - 2个ec2实例相互交互
- c# - 从基于 Is64Bit bool 的路径中获取 FileInfo
- node.js - 如何更改 npm 中的默认 package.json 位置?
- laravel - Laravel Artisan Migrate 命令创建表但不将每个迁移文件填充到迁移表
- bash - 如何在bash中删除具有不同长度的字符串的最后一部分