FastAPI 缺失值
FastAPI Missing value
我将我的应用程序部署到 Heroku 时收到以下错误:
{
"detail": [
{
"loc": [
"body",
"id"
],
"msg": "field required",
"type": "value_error.missing"
}
]
}
并从控制台登录
22-03-05T19:45:12.863425+00:00 heroku[router]: at=info method=GET path="/" host=wallet-reputation.herokuapp.com request_id=51780a1f-491a-4dd6-a8c0-164b41745405 fwd="95.175.20.47" dyno=web.1 connect=0ms service=4ms status=422 bytes=248 protocol=http
这是我的 Fastapi 应用
@app.get("/")
def index(request: Request, id: str = Form(...)):
return templates.TemplateResponse("main_page.html", context={"request": request})
这就是我的 html 文件的样子:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.1.3/dist/css/bootstrap.min.css"
integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<title>Main Page</title>
</head>
<body>
<form method="get">
<center>
<div class="form-group col-lg-4">
<label for="walletAdress">Natluk Coin Reputation Wallet</label>
<input type="text" class="form-control" id="walletAdress" aria-describedby="walletlHelp"
placeholder="Wallet address" style="text-align: center" name="id">
</div>
</center>
<center>
<a class="btn btn-primary" type="submit" role="button"
href="https://wallet-reputation.herokuapp.com/wallet/{{ id }}">Check Wallet</a>
<a class="btn btn-primary" type="submit" role="button"
href="https://wallet-reputation.herokuapp.com/wallet/run/{{ id }}">Create Wallet</a>
</center>
</html>
所以逻辑是,当我为我的“/”端点加注星标时,我 post 将字符串转换为表格,然后我可以单击其中一个按钮,该按钮从 运行 端点开始,变量来自表格.
更新
下面是一个示例,说明如何通过表单提交值,以及您的端点应该是什么样子:
from fastapi import FastAPI, Request, status, Form
from fastapi.responses import HTMLResponse
app = FastAPI()
@app.get('/', response_class=HTMLResponse)
async def event_create_form(request: Request):
html_content = """
<html>
<body>
<form method="POST" action="/submit">
<input type="text" name="id">
<input type="submit" value="Create Event">
</form>
</body>
</html>
"""
return HTMLResponse(content=html_content, status_code=200)
@app.post('/submit')
async def event_create(id: int = Form(...)):
return {"id": id}
您正在提交 id
作为 path
parameter, but your endpoint expects it to be a body (Form
) 参数。因此,您应该将端点更改为:
@app.get("/{id}")
def index(request: Request, id: str):
...
我将我的应用程序部署到 Heroku 时收到以下错误:
{
"detail": [
{
"loc": [
"body",
"id"
],
"msg": "field required",
"type": "value_error.missing"
}
]
}
并从控制台登录
22-03-05T19:45:12.863425+00:00 heroku[router]: at=info method=GET path="/" host=wallet-reputation.herokuapp.com request_id=51780a1f-491a-4dd6-a8c0-164b41745405 fwd="95.175.20.47" dyno=web.1 connect=0ms service=4ms status=422 bytes=248 protocol=http
这是我的 Fastapi 应用
@app.get("/")
def index(request: Request, id: str = Form(...)):
return templates.TemplateResponse("main_page.html", context={"request": request})
这就是我的 html 文件的样子:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.1.3/dist/css/bootstrap.min.css"
integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<title>Main Page</title>
</head>
<body>
<form method="get">
<center>
<div class="form-group col-lg-4">
<label for="walletAdress">Natluk Coin Reputation Wallet</label>
<input type="text" class="form-control" id="walletAdress" aria-describedby="walletlHelp"
placeholder="Wallet address" style="text-align: center" name="id">
</div>
</center>
<center>
<a class="btn btn-primary" type="submit" role="button"
href="https://wallet-reputation.herokuapp.com/wallet/{{ id }}">Check Wallet</a>
<a class="btn btn-primary" type="submit" role="button"
href="https://wallet-reputation.herokuapp.com/wallet/run/{{ id }}">Create Wallet</a>
</center>
</html>
所以逻辑是,当我为我的“/”端点加注星标时,我 post 将字符串转换为表格,然后我可以单击其中一个按钮,该按钮从 运行 端点开始,变量来自表格.
更新
下面是一个示例,说明如何通过表单提交值,以及您的端点应该是什么样子:
from fastapi import FastAPI, Request, status, Form
from fastapi.responses import HTMLResponse
app = FastAPI()
@app.get('/', response_class=HTMLResponse)
async def event_create_form(request: Request):
html_content = """
<html>
<body>
<form method="POST" action="/submit">
<input type="text" name="id">
<input type="submit" value="Create Event">
</form>
</body>
</html>
"""
return HTMLResponse(content=html_content, status_code=200)
@app.post('/submit')
async def event_create(id: int = Form(...)):
return {"id": id}
您正在提交 id
作为 path
parameter, but your endpoint expects it to be a body (Form
) 参数。因此,您应该将端点更改为:
@app.get("/{id}")
def index(request: Request, id: str):
...