【发布时间】:2022-01-26 07:54:20
【问题描述】:
我已经编好了post调用,并渲染了login_form.html的jinja2模板
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"></input>
<h5>Password</h5>
<input name="passcode" placeholder="password" type="text"></input>
<input type="submit"></input>
</form>
<p>{{result}}</p>
</body>
</html>
当我在网络浏览器上加载页面时,我得到:
{"detail":"Method Not Allowed"}
【问题讨论】:
-
从浏览器打开它是一个 GET 请求,而不是你声明一个 POST
-
@FedericoProvenziani 是的,但我已经看到 POST 请求像这样打开的 jinja2 和 fastAPI 教程,因为它在最后返回 html 页面
-
抱歉,看到图片并阅读了您的文字,我以为您尝试通过直接请求访问该页面,而不是提交表单
-
我仍然认为@FedericoProvenziani 是正确的;显示模板的 GET 端点在哪里?由于您没有对 POST 端点中的模板执行任何操作,因此这似乎是一个常规的 GET 端点?
标签: python html api jinja2 fastapi