這是我參與8月更文挑戰的第12天,活動詳情查看:8月更文挑戰html
相信你必定聽過或者見過 HTMl
的 form
元素,這裏所指的 Form
表單就是 FastApi
用來獲取 HTML
中 form
元素的對象。前端
假設咱們須要開發一個登錄的界面,登錄頁面有一個 form
表單,其中包含用戶名和密碼兩個元素,咱們須要根據前端頁面傳回來的 form
表單內容來肯定是否登錄成功。python
from fastapi import FastAPI
# 導入Request上下文對象,用來在先後臺之間傳遞參數
from starlette.requests import Request
# 導入jinja2模板引擎對象,用於後續使用
from starlette.templating import Jinja2Templates
app=FastAPI()
# 實例化一個模板引擎對象,指定模板所在路徑
templates=Jinja2Templates(directory='templates')
# 定義主頁函數,返回登錄頁面
@app.get('/')
async def welcome(request:Request):
return templates.TemplateResponse(name='login.html',context={'request':request})
# 導入Form表單
from fastapi import Form
@app.post('/login/')
# 視圖函數接收post請求體中的Form表單元素
async def login(request:Request,username=Form(...),pwd=Form(...)):
# 登錄邏輯演示
if username=='phyger' and pwd =='phyger666':
return templates.TemplateResponse(name='index.html',context={'request':request,'result':'SUCCESS'})
else:
return templates.TemplateResponse(name='index.html',context={'request':request,'result':'FAILED'})
if __name__ == '__main__':
import uvicorn
uvicorn.run(app='main:app',host='127.0.0.1',port=8765,reload=True)
複製代碼
分析:咱們使用
FastApi
的Form
對象來接收前端傳過來的form
表單對象。其中接收前端form
表單對象時使用的變量名須要和from
表單中的name
保持一致。markdown
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login</title>
</head>
<body>
<form action="/login/" enctype="application/x-www-form-urlencoded" method="POST">
<table>
<tbody>
<tr><td>用戶名:</td><td><input type="text" name="username"></td></tr>
<tr><td>密碼:</td><td><input type="password" name="pwd"></td></tr>
</tbody>
</table>
<input type='submit' style="font-size: medium;">
</form>
</body>
</html>
複製代碼
以上,咱們簡單演示了 FastApi
處理 Form
表單的基本用法。app
感謝您的閱讀,別忘了關注,點贊,評論,轉發四連喲!async