FastAPI: static file & template(16)

合理的使用静态资源和页面模板,更好的来实现网站前后端分离。

静态资源通过aiofiles来实现。

简单理解,模板就是 web 后端向前端发送的 html 模型,还是jinia2来实现。

安装

1
2
3
pip install aiofiles

pip install jinja2

验证

  1. 在项目根目录下,创建statictemplates文件夹。

  2. 在static下添加一个图片fastapi.jpg

  3. 在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>
  4. 接口返回html页面。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    from 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})
  5. 结果

唐胡璐 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
分享创造价值,您的支持将鼓励我继续前行!