抱歉,不精通Python。
我还没有找到该用例的文档。我如何获取请求正文,确保它是一个有效的 Json(任何有效的 json,包括数字、字符串、布尔值和空值,而不仅仅是对象和数组)并获取实际的 Json。使用 pydantic 强制 Json 具有特定的结构。
我正在构建一个简单的 API 来测试数据库。当我使用 get request 时一切正常,但如果我更改为 post,我会收到“无法处理的实体”错误:
这是 FastAPI 代码:
from fastapi import FastAPI
app = FastAPI()
@app.post("/")
def main(user):
return user
Run Code Online (Sandbox Code Playgroud)
然后,我的请求使用 javascript
let axios = require('axios')
data = {
user: 'smith'
}
axios.post('http://localhost:8000', data)
.then(response => (console.log(response.url)))
Run Code Online (Sandbox Code Playgroud)
并使用 Python
import requests
url = 'http://127.0.0.1:8000'
data = {'user': 'Smith'}
response = requests.post(url, json=data)
print(response.text)
Run Code Online (Sandbox Code Playgroud)
我也尝试解析为 json,使用 utf-8 编码,并更改标题。没有什么对我有用。
我有一个名为的文件main.py,其中POST仅使用一个输入参数(整数)进行调用。简化代码如下:
from fastapi import FastAPI
app = FastAPI()
@app.post("/do_something/")
async def do_something(process_id: int):
# some code
return {"process_id": process_id}
Run Code Online (Sandbox Code Playgroud)
现在,如果我运行保存在文件中的测试代码test_main.py,即:
from fastapi.testclient import TestClient
from main import app
client = TestClient(app)
def test_do_something():
response = client.post(
"/do_something/",
json={
"process_id": 16
}
)
return response.json()
print(test_do_something())
Run Code Online (Sandbox Code Playgroud)
我得到:
{'detail': [{'loc': ['query', 'process_id'], 'msg': 'field required', 'type': 'value_error.missing'}]}
Run Code Online (Sandbox Code Playgroud)
我不明白这是什么错误。有必要继续呼吁POST。
我想将 JSON 对象传递到 FastAPI 后端。这是我在前端应用程序中所做的事情:
data = {'labels': labels, 'sequences': sequences}
response = requests.post(api_url, data = data)
Run Code Online (Sandbox Code Playgroud)
FastAPI 中的后端 API 如下所示:
@app.post("/api/zero-shot/")
async def Zero_Shot_Classification(request: Request):
data = await request.json()
Run Code Online (Sandbox Code Playgroud)
但是,我收到此错误:
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Run Code Online (Sandbox Code Playgroud) 在Flask中,来自客户端的请求可以如下处理。
对于 JSON 数据:
payload = request.get_json()
对于令牌参数:
token = request.headers.get('Authorization')
对于参数:
id = request.args.get('url', None)
FastAPI 做同样事情的方法是什么?