文章目录
- 1. 安装包
- 2. 编写代码
- 3. 终端运行
- 4. 文档
- 5. 增加数据
learn from https://fastapi.tiangolo.com/zh/#typer-fastapi
1. 安装包
# pip install fastapi
# pip install uvicorn[standard]
2. 编写代码
main.py
from typing import Optional # typing 模块用于类型检查
from fastapi import FastAPIapp = FastAPI()@app.get("/")
def read_root():return {'hello': 'world'}@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):return {"item_id": item_id, "q": q}
3. 终端运行
uvicorn main:app --reload
(pt19) D:\gitcode\Python_learning\fastapi\1> uvicorn main:app --reload
INFO: Will watch for changes in these directories: ['D:\\gitcode\\Python_learning\\fastapi\\1']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [6540] using watchgod
INFO: Started server process [32632]
INFO: Waiting for application startup.
INFO: Application startup complete.
uvicorn main:app 命令含义如下:main:main.py 文件(一个 Python "模块")。
app:在 main.py 文件中通过 app = FastAPI() 创建的对象。
--reload:让服务器在更新代码后重新启动。仅在开发时使用该选项。
-
在浏览器输入
http://127.0.0.1:8000/items/5?q=somequery
终端显示INFO: 127.0.0.1:4014 - "GET /items/5?q=somequery HTTP/1.1" 200 OK
浏览器显示{"item_id":5,"q":"somequery"}
-
浏览器输入
http://127.0.0.1:8000/items/x?q=somequery
终端显示
INFO: 127.0.0.1:4014 - "GET /favicon.ico HTTP/1.1" 404 Not Found
INFO: 127.0.0.1:4022 - "GET /favicon.ico HTTP/1.1" 404 Not Found
INFO: 127.0.0.1:4022 - "GET /favicon.ico HTTP/1.1" 404 Not Found
INFO: 127.0.0.1:4015 - "GET /items/x?q=somequery HTTP/1.1" 422 Unprocessable Entity
浏览器显示
{"detail":[{"loc":["path","item_id"],"msg":"value is not a valid integer","type":"type_error.integer"}]}
如果把 main 里面的 : int
删除,则不检查参数类型,原来是框架内部做了强制检查
- 同样的,输入
http://127.0.0.1:8000/
,返回{"hello":"world"}
- 输入
http://127.0.0.1:8000/items/5
,返回{"item_id":5,"q":null}
上面呢,我们创建了具有下面功能的 API
- 通过 路径
/
和/items/{item_id}
接受 HTTP 请求。 - 以上 路径 都接受
GET
操作(也被称为 HTTP 方法)。 /items/{item_id}
路径 有一个 路径参数item_id
并且应该为int
类型。/items/{item_id}
路径 有一个可选的 str
类型的 查询参数 q
4. 文档
- 浏览器输入
http://127.0.0.1:8000/docs
- 浏览器输入
http://127.0.0.1:8000/redoc
5. 增加数据
- 添加 Item 类
# pip install fastapi
# pip install uvicorn[standard]from typing import Optional # typing 模块用于类型检查
from fastapi import FastAPI
from pydantic import BaseModel# pydantic库是一种常用的用于数据接口schema定义与检查的库app = FastAPI()class Item(BaseModel):name: strprice: floatis_offer: Optional[bool] = None@app.get("/")
def read_root():return {'hello': 'world'}@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):return {"item_id": item_id, "q": q}@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):return {"item_name": item.name, "item_id": item_id}