1、fastApi简介
官方文档:https://fastapi.tiangolo.com/
源码: https://github.com/tiangolo/fastapi
2、环境准备
安装python
安装pycharm
安装fastAPI
安装 uvicorn
查看已经安装的第三方库:pip list
查看pip 配置信息:pip config list
3、使用虚拟环境
3.1方式一 venv
首先为虚拟环境创建一个文件夹,用于存放虚拟环境,命令窗口切换的虚拟环境存放的路径下执行以下命令
python -m venv myenv
结束虚拟环境:deactivate
3.2使用virtualenvwrapper-win
安装:pip install virtualenvwrapper-win
创建虚拟环境:mkvirtualenv myenv2
3.3多版本共存
电脑上同时安装多个版本
在安装第二个版本的时候,没有自动设置环境变量。
将第二个版本的安装路径添加到环境变量中
在相应版本根路径下的python.exe拷贝一个副本,并根据版本号重新命名python3.exe。这样在cmd中直接使用python3就可以调用python3.10版本了
4、pycharm环境使用问题
pycharm中自带的终端存在问题
除pycharm23版本外,针对虚拟环境提出一下建议。
- 不推荐使用pycharm提供的虚拟环境
- 如果使用虚拟环境,可以手动新建虚拟环境——手动新建环境后,在pycharm终端中进入虚拟环境并激活,既可以使用虚拟环境
- 学习过程中使用全局解释器
因为我使用pycharm23版本,因此我使用pycharm虚拟环境。在虚拟环境中首先安装以下两个包
pip install fastApi
pip install uvicorn
5、第一个fastAPI
from fastapi import FastAPI
# 创建一个对象
app = FastAPI()
# 在函数上添加一个装饰器,app就是上面创建的对象
# 其中参数是指明路径
@app.get("/") # 路径(函数)装饰器
def hello(): # 路径函数或接口函数
return {"hello":"world698654"} #接口返回值
在浏览器中安装json View插件,序列化Json数据
启动方式二
6、路径参数
- 静态路径参数
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def home():
return {"home":"首页"}
@app.get("/apple")
def apple():
return {"name":"apple","price":9.9}
@app.get("/huawei")
def huawei():
return {"name":"huawei", "price":9.9}
- 动态参数校验
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def home():
return {"home":"首页"}
@app.get("/apple")
def apple():
return {"name":"apple","price":9.9}
@app.get("/huawei")
def huawei():
return {"name":"huawei", "price":9.9}
# 动态路由的解决方式
@app.get("/books/{book_id}")
def books(book_id):
print(type(book_id)) # 默认情况下参数类型为字符串类型
return {"id":book_id, "title":f"图书{book_id}"}
@app.get("/foods/{food_id}")
def foods(food_id: int):
# 因为函数中指定了参数类型为int ,所以fastAPI自动将其转换为int
# 同时进行参数类型校验
print(type(food_id))
return {"id":food_id, "title":f"图书{food_id}"}
7、接口顺序问题
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def home():
return {"home":"首页"}
@app.get("/books/most_popular")
def most_popular( ):
# 因为函数中指定了参数类型为int ,所以fastAPI自动将其转换为int
# 同时进行参数类型校验
return {"data":"这是本站最畅销的图书"}
# 动态路由的解决方式
@app.get("/books/{book_id}")
def books(book_id):
print(type(book_id)) # 默认情况下参数类型为字符串类型
return {"id":book_id, "title":f"图书{book_id}"}
8、查询参数
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def home():
return {"home":"首页"}
BOOKS = [
{"id":1, "titile":"图书1"},
{"id":2, "titile":"图书2"},
{"id":3, "titile":"图书3"},
{"id":4, "titile":"图书4"},
{"id":5, "titile":"图书5"},
{"id":6, "titile":"图书6"},
{"id":7, "titile":"图书7"},
{"id":8, "titile":"图书8"},
{"id":9, "titile":"图书9"},
{"id":10, "titile":"图书10"},
]
@app.get("/books")
# 函数中的参数与前端请求的参数必须一直
def books(page:int,size:int):
# 假设page=1,size=3,则BOOKS[0:3],从索引0开始取3个数
return BOOKS[(page-1)*size:page*size]
# @app.get("/books")
# # 函数中的参数与前端请求的参数必须一直
# def books(page,size):
# print(type(page),print(size)) # 前端传递过来默认类型为size
# return BOOKS
openAPI
在Swagger模式下可以与后台进行交互