锵锵枪 wrote:
使用FastAPI搭建网站(三):响应及使用模板 ###响应,直接返回HTML内容 ![](https://wx4.sinaimg.cn/large/007G7Ahxly4ghxanbsz2gj30qo0c8dgc.jpg) 默认情况下,FastAPI使用 JSONResponse 返回JSON 数据,不过我们可以通过 HTMLResponse 来返回HTML数据。 ``` from fastapi import FastAPI from fastapi.responses import HTMLResponse app = FastAPI() @app.get("/") async def index(): html_content = "

Look ma! HTML!

" return HTMLResponse(content=html_content, status_code=200) ``` FastAPI所有的响应类型,都是继承自 Response 类,所以我们也可以直接使用它。 Response 接受下面这些参数: * content - 响应内容,str 或者 bytes. * status_code - HTTP状态码. * headers - 头消息,dict类型. * media_type - str 响应类型. 如:"text/html". > from fastapi import Response >... > return Response(content=html\_content, media\_type="text/html") FastAPI也提供了跳转的响应 RedirectResponse ,我们可以直接使用它。默认的调整类型是307(Temporary Redirect),我们也可以通过 status_code 修改为301,302,303,308 ... > from fastapi.responses import RedirectResponse >... > return RedirectResponse("https://xxx.21du.cn") ### 使用模板 直接在代码里面返回 HTML ,显得不那么专业。MVC模型里强调 数据 与 视图 分离。FastAPI提供了强大的模板支持,默认使用 Jinja2 模板引擎,当然也可以换自己熟悉的模板引擎。 > pip3 install Jinja2 如果需要使用静态文件 > pip3 install aiofiles ``` from fastapi import FastAPI, Request from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates app = FastAPI() app.mount("/static", StaticFiles(directory="static"), name="static") t = Jinja2Templates(directory="templates") @app.get("/") async def index(request: Request): return t.TemplateResponse("index.html", {"request": request,"title":"锵锵枪的个人网站"}) ``` 其中Request参数是必须的。然后我们创建模板文件 templates/item.html: ```

{{ title }}

This is a template.

``` OK,It's running
锵锵枪 2020-08-21 23:16:20  0 回复