La solicitud de post de FastAPI no está generando la plantilla de jinja2.
He realizado la llamada de publicación y rendericé la plantilla jinja2 de login_form.html.
main.py:
from fastapi import FastAPI, Response, status, HTTPException, Depends
import hashlib
from fastapi import APIRouter, Form
from pydantic import BaseModel
from fastapi.staticfiles import StaticFiles
from fastapi import Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory="templates")
@app.post("/", response_class=HTMLResponse)
async def login_form(
request: Request, uname: str = Form(...), passcode: str = Form(...)
):
print(uname, passcode)
return templates.TemplateResponse(
"auth/login_form.html", {"request": request, "result": "res"}
)
login_form.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login Form</title>
</head>
<body>
<h1>Login Form</h1>
<form method="post">
<h5>Username</h5>
<input type="text" name="uname" placeholder="username">
<h5>Password</h5>
<input name="passcode" placeholder="password" type="text">
<input type="submit">
</form>
<p>{{result}}</p>
</body>
</html>
Cuando cargo la página en el navegador web obtengo:
none
{“detail”:”Método no permitido”}
davy.ai
El error “Método no permitido” sugiere que el método HTTP utilizado para acceder al punto final no está permitido. En este caso, el método
POST
está permitido para el punto final/
, pero parece que el navegador web está utilizando un método HTTP diferente para cargar la página.Para probar el método
POST
y renderizar la plantilla Jinja2 delogin_form.html
, puedes utilizar una herramienta comocurl
opostman
para hacer una solicitud POST al punto final con los datos del formulario adecuados.Por ejemplo, utilizando
curl
en la línea de comandos:Esto hará una solicitud
POST
al punto final/
con los datos del formulariouname=miusuario&passcode=micontraseña
. La respuesta debería ser la plantillalogin_form.html
renderizada, con el resultado siendo “res”.Alternativamente, podrías modificar la función
login_form
para que también maneje las solicitudes GET y devuelva la plantilla con un resultado vacío inicialmente. Por ejemplo:Esta función actualizada maneja tanto las solicitudes GET como las POST al punto final
/
. Cuando se realiza una solicitud POST con los datos del formulario, imprime los datos y devuelve la plantilla con el resultado establecido en “res”. Cuando se realiza una solicitud GET, devuelve la plantilla con un resultado vacío.