首页 > 解决方案 > Python:FastApi(无法处理的实体)错误

问题描述

当我使用GET请求将数据发送到服务器时,它工作正常,但是当使用POST请求时,它显示名为“无法处理的实体”的错误

这是我的 Ajax 请求代码

var newName = "Bhanuka"; 
//do your own request an handle the results
$.ajax({
  type: "post",
  url: "/names/",
  data: {d:newName},
  dataType: 'json', 
  success: function(data){ 
     console.log(data);
  }
});

这是我的 fastAPI 服务器端代码

from fastapi import FastAPI, Request,Body
from pydantic import BaseModel

from fastapi.templating import Jinja2Templates
from fastapi.encoders import jsonable_encoder
app = FastAPI()

templates = Jinja2Templates(directory="templates")

@app.get("/items/{id}")
async def read_item(request: Request, id: str):
    return templates.TemplateResponse("item.html", {"request": request, "id": id})

@app.post("/names/")
async def create_item(d:str):
    return d

@app.get("/items11/{item_id}")
def read_item22(item_id: int, q: str ):
    return {"item_id": item_id, "q": q}

标签: pythonfastapi

解决方案


这是因为您发送的数据是 json。并且 POST 请求 api 期待 str。

如果在 api 调用期间格式不匹配,则会引发 Unprocessable Entity 错误。

你可以使用它来处理它

  1. 要求
  2. 书呆子的

好吧,来到第一种情况,1.Request:你可以使用curl的request

curl -i -d "param1=value1¶m2=value2" http://localhost:8000/check

以下面的代码为例:

from fastapi import FastAPI, Request
from fastapi.encoders import jsonable_encoder

app = FastAPI()

@app.post('/check')
async def check(request: Request):
    da = await request.form()
    da = jsonable_encoder(da)
    print(da)
    return da
  1. @kamal 的回答中提到的 Pydantics

推荐阅读