Recibo el siguiente error cuando implemento mi aplicación en Heroku:
{ "detail": [ { "loc": [ "body", "id" ], "msg": "field required", "type": "value_error.missing" } ] }y registro desde la consola
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
Esta es mi aplicación Fastapi
@app.get("/") def index(request: Request, id: str = Form(...)): return templates.TemplateResponse("main_page.html", context={"request": request})Así es como se ve mi archivo 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>Entonces, la lógica es que, cuando protagonizo mi punto final "/", publico la cadena en el formulario, y luego puedo hacer clic en uno de los botones que comienzan a ejecutar el punto final con la variable del formulario.
A continuación se muestra un ejemplo de cómo enviar un valor a través del formulario y cómo debería verse su punto final:
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} Está enviando id como parámetro de path , pero su punto final espera que sea un parámetro de cuerpo ( Form ). Por lo tanto, debe cambiar su punto final a:
@app.get("/{id}") def index(request: Request, id: str): ...