Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >FastAPI Post请求没有呈现jinja2模板

FastAPI Post请求没有呈现jinja2模板
EN

Stack Overflow用户
提问于 2021-12-27 01:55:04
回答 1查看 868关注 0票数 0

我已经完成了post调用并呈现了jinja2的login_form.html模板

main.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!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"></input>
<h5>Password</h5>
<input name="passcode" placeholder="password" type="text"></input>
<input type="submit"></input>
</form>

<p>{{result}}</p>
</body>
</html>

当我在web浏览器上加载页面时,我得到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"detail":"Method Not Allowed"}

EN

回答 1

Stack Overflow用户

发布于 2021-12-27 12:46:45

如果希望在浏览器中工作,login_form()必须是GET端点。

如果您见过POST与FastAPI一起使用的例子,那可能是因为这是为了构建API而不是web应用程序(也许星轮才是您真正想要的)。

为了使解决方案在浏览器中工作(使用FastAPI),您可以添加另一个端点(我称之为POST /handle-form)。您还必须调整您的login_form.html模板(见下文)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from fastapi import FastAPI, Form, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates

app = FastAPI()

templates = Jinja2Templates(directory="templates")

@app.get("/", response_class=HTMLResponse)
async def login_form(request: Request):
    return templates.TemplateResponse(
        "auth/login_form.html", {"request": request, "result": "res"}
    )

@app.post("/handle-form")
async def handle_form(
    request: Request,
    uname: str = Form(...),
    passcode: str = Form(...),
):
    print(uname, passcode)

login_form.html的唯一更改是将action="handle-form"添加到form标记,其中handle-form是将表单数据发送到以下端点的路径:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...
<form action="handle-form" method="post">
...

它呈现如下:

一旦您输入用户名和密码并按下Submitunamepasscode将被发送到handle_form()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70493971

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文