FastAPI-表单处理(三)

2023-05-07 21:22:19 浏览数 (3)

在模板中呈现表单

在 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": "登录失败"})

在上面的代码中,我们首先定义了一个名为 templatesJinja2Templates 实例,用于加载模板文件。然后我们定义了一个 / 路由,该路由用于呈现登录页面。该路由返回一个 TemplateResponse 对象,该对象使用 login.html 模板文件来生成 HTML 页面。

在登录页面中,我们使用 <form> 元素来创建一个表单。例如,下面是一个使用 HTML 来定义的登录表单:

代码语言:javascript复制
<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 对象,并尝试验证该对象。如果验证成功,我们可以将用户重定向到其他页面,或者返回一个成功消息。

0 人点赞