在模板中呈现表单
在 FastAPI 中,您可以使用 Jinja2 模板引擎来呈现表单。Jinja2 是一个流行的模板引擎,它可以帮助您以可重用和可维护的方式生成 HTML 页面。
例如,下面是一个使用 Jinja2 呈现登录表单的示例:
代码语言:javascript复制from fastapi import FastAPI, Request, Form
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory="templates")
@app.get("/")
async def login(request: Request):
return templates.TemplateResponse("login.html", {"request": request})
@app.post("/")
async def login(request: Request, username: str = Form(...), password: str = Form(...)):
# 验证表单数据
form_data = LoginForm(username=username, password=password)
# 处理表单提交
# ...
return templates.TemplateResponse("login.html", {"request": request, "message": "登录失败"})
在上面的代码中,我们首先定义了一个名为 templates
的 Jinja2Templates
实例,用于加载模板文件。然后我们定义了一个 /
路由,该路由用于呈现登录页面。该路由返回一个 TemplateResponse
对象,该对象使用 login.html
模板文件来生成 HTML 页面。
在登录页面中,我们使用 <form>
元素来创建一个表单。例如,下面是一个使用 HTML 来定义的登录表单:
<form method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username" required>
<br>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required>
<br>
<button type="submit">Log In</button>
</form>
在表单提交时,FastAPI 将自动解析表单数据并调用与路由函数相对应的函数。在 /
路由函数中,我们使用表单数据创建了一个 LoginForm
对象,并尝试验证该对象。如果验证成功,我们可以将用户重定向到其他页面,或者返回一个成功消息。