FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。
本人也是新手,其中我也有改名,截图有不同水印请勿见怪,本文章当成学习分享,如有错误,请多担当。使用的是pycharm
文档: https://fastapi.tiangolo.com
一、体验
首先体验官网给出的代码段
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
uvicorn main:app --reload
在终端使用,当你想结束时,只需在终端按ctrl+c即可
出现
在浏览器中打开可得
如果想要实现交互式文档,只需在后面加上/docs
二、了解参数
如其中的@app.get("/")
告诉 FastAPI 在它下方的函数负责处理如下访问请求:
还有其他的参数:
@app.post()
@app.put()
@app.delete()
以及更少见的:
@app.options()
@app.head()
@app.patch()
@app.trace()
这里先对@app.get("/")进行分析
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id):
return {"item_id": item_id}
你在运行的时候,则后面网址需要加上/items/和你想要输入item_id的值,例:
当然了,你可以在后面填上你所有你想要的值,包括你可以限制填入的值是int或者str之类的
只要将相关代码进行修改即可:
async def read_item(item_id: int):
当然了,有些朋友看见async的时候表示不理解,我刚开始也不理解,后来知道了async的作用就是:
- 如果这个请求比较慢,比如连接数据库读取数据、文件IO、rpc调用等一般加上async,我想普通项目里大部分请求都会多多少少跟数据库打交道,所以加的往往比较多;
- 但是对于我们学习使用可以不添加,因为或多或少会增加开销,不过可以忽略
而且我们需要注重它的顺序,这个在官方文档就有提及
由于路径操作是按顺序依次运行的,你需要确保路径 /users/me
声明在路径 /users/{user_id}
之前:
from fastapi import FastAPI
app = FastAPI()
@app.get("/users/me")
async def read_user_me():
return {"user_id": "the current user"}
@app.get("/users/{user_id}")
async def read_user(user_id: str):
return {"user_id": user_id}
否则,/users/{user_id}
的路径还将与 /users/me
相匹配,"认为"自己正在接收一个值为 "me"
的 user_id
参数。
三、预设值
它可以创建enum类
from enum import Enum
from fastapi import FastAPI
class ModelName(str, Enum):
alexnet = "alexnet"
resnet = "resnet"
lenet = "lenet"
app = FastAPI()
@app.get("/models/{model_name}")
async def get_model(model_name: ModelName):
if model_name == ModelName.alexnet:
return {"model_name": model_name, "message": "Deep Learning FTW!"}
if model_name.value == "lenet":
return {"model_name": model_name, "message": "LeCNN all the images"}
return {"model_name": model_name, "message": "Have some residuals"}
运行结果如下
你也可以查看交互式文档,因为已经指定了路径参数的可用值,所以交互式文档可以恰当地展示它们。
http://127.0.0.1:8000/docs#/default/get_model_models__model_name_get
点击try it out,即可选择自己想要的神经网络类型
然后点击Execute即可
四、查询参数
查询字符串是键值对的集合,这些键值对位于 URL 的 ?
之后,并以 &
符号分隔。
from fastapi import FastAPI
app = FastAPI()
fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]
@app.get("/items/")
async def read_item(skip: int = 0, limit: int = 10):
return fake_items_db[skip : skip + limit]
在终端输入这个即可
http://127.0.0.1:8000/items/?skip=0&limit=10
当然你可以对参数进行更改,比如skip=20,limit不输入,就会skip输入20,limit保持默认值10
五、可选参数
通过同样的方式,你可以将它们的默认值设置为 None
来声明可选查询参数:
from typing import Optional
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: str, q: Optional[str] = None):
if q:
return {"item_id": item_id, "q": q}
return {"item_id": item_id}
切记的时如果要输入q的值,请记得输入英文的?,并且要写q=你想要的值。
如:
http://127.0.0.1:8000/items/%E5%93%88%E5%93%88?q=%E6%88%91%E6%98%AF%E5%82%BB%E8%9B%8B
六、必选参数
当你想让一个查询参数成为必需的,不声明任何默认值就可以:
async def read_user_item(item_id: str, needy: str):
没填完必选参数则会报错
提醒:两个参数,第二个参数需要写名称:,中间用英文?连接
本节内容就到这里啦,我也会接着学习,大家当看看笑话就可以啦