合理的使用静态资源和页面模板,更好的来实现网站前后端分离。
静态资源通过aiofiles
来实现。
简单理解,模板就是 web
后端向前端发送的 html
模型,还是jinia2
来实现。
安装
1 | pip install aiofiles |
验证
在项目根目录下,创建
static
和templates
文件夹。在static下添加一个图片
fastapi.jpg
。在templates下添加一个页面模板。
1
2
3
4
5
6
7
8
9
10<!DOCTYPE html>
<html>
<head>
<title>Welcome</title>
<link href="{{ url_for('static', path='/fastapi.jpg') }}" rel="stylesheet">
</head>
<body>
<h1>Welcome: {{ username }}</h1>
</body>
</html>接口返回html页面。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
app.mount("/static", StaticFiles(directory="static"), name="static")
templates = Jinja2Templates(directory="templates")
# Return html page
@app.get("/user/{user_id}", response_class=HTMLResponse)
def read_user(request: Request, user_id: int, db: Session = Depends(get_db)):
db_user = crud.get_user(db, user_id=user_id)
if not db_user:
raise HTTPException(status_code=404, detail="User not found")
return templates.TemplateResponse('index.html', {'request': request, 'username': db_user.email})结果