前言
FastAPI: 是一个基于Python的高效的Web框架。
一、FastAPI是什么?
fastapi是高性能的web框架。他的主要特点是:
- 快速编码
- 减少人为bug
- 直观
- 简易
- 具有交互式文档
- 基于API的开放标准(并与之完全兼容):OpenAPI(以前称为Swagger)和JSON Schema。
技术背景:python3.6+、Starlette、Pydantic
官方文档地址:https://fastapi.tiangolo.com/
二、搭建FastAPI
安装模块
1. 基本功能模块:
fastapi、uvicorn 以及 python-multipart 三个库。
pip install fastapi
pip install uvicorn
pip install python-multipart
jinjia2: FastAPI可以使用多种模板引擎,常用的是 jinja2 。使用时需要先安装 jinja2 ,然后设置相应的目录。
from starlette.requests import Request
from fastapi import FastAPI
from starlette.templating import Jinja2Templates
app = FastAPI()
# 设置模板所在目录
templates = Jinja2Templates(directory="templates")
@app.get("/")
async def main(request: Request): # 使用模板需带上 request
return templates.TemplateResponse('index.html',
{'request': request, 'hello': 'HI...'})
##########
TemplateResponse 方法的第一个参数就是 模板的路径 ,
在上面的例子中,我们需要建立一个 templates 目录,
在下面建立一个 index.html 的文件;
第二个参数是一个字典 ,包含了 request 请求和一些其他的参数。
##########
aiofiles:如果要使用静态文件,需要先安装 aiofiles ,然后使用 mount 方法来设置静态文件目录。
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
### mount 之后就可以使用 url_for 方法来生成静态文件的链接了,模板中可以使用如下代码:
<link href="{{ url_for('static', path='/css/bootstrap.min.css') }}" rel="stylesheet">
2. 辅助功能模块:
运行FastAPI程序
代码的示例:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
@app.get("/")功能是定义路径操作,表示通过GET方法访问网站的根路径(默认:http://127.0.0.1:8080/)时执行下面函数所定义的操作,这里支持 GET,POST,DELETE等http方法。@app 是python装饰器的应用,这里意味着要执行下面的函数。
async def 是定义异步函数的方法,定义普通函数直接使用def。如果程序不需要严格按照先后顺序执行函数(如先访问数据库,然后根据查询数据进行特定计算)可以使用异步,否则使用普通函数即可。
执行代码:
将代码保存到main.py文件中,打开cmd,输入 uvicorn main:app --reload, 如下:
# uvicorn python文件名:FastAPI对象名 --reload
uvicorn main:app --reload
上面命令包括了三个要素:
- 文件名:比如文件叫做 main.py ,那这里就是 main 。
- FastAPI对象名:在模块中对应的 FastAPI 的对象名,在本例中就是 app 。
- --reload:在文件变化后重启服务器,仅用于开发环境。
运行结果:
打开浏览器输入:http://12.0.0.1:8000,即可看到成功返回:
{“message”:"Hello World"}
部署
直接部署:
uvicorm main:app --host 0.0.0.0 --port 8000
持续后台运行:
安装screen模块,或官方推荐的gunicorn
使用自定义域名:
使用宝塔反向代理,启用SSL需要用DNS验证,而不能用文件验证。