什么是路径
- 假设一个 url 是: http://127.0.0.1:8000items/abcd
- 那么路径 path 就是 /items/abcd
路径参数
就是将路径上的某一部分变成参数,可通过请求传递,然后 FastAPI 解析
上代码
#!/usr/bin/env python# -*- coding: utf-8 -*-# @File : test2.py# @Author: 尘心2259# @Date : 2022/1/25 23:07# @Desc :import uvicornfrom fastapi import FastAPIapp = FastAPI()@app.get("/items/{item_id}")async def read_item(item_id):return {"item_id": item_id}if __name__ == '__main__':uvicorn.run(app="test2:app", host="127.0.0.1", port=8000, reload=True, debug=True)
浏览器访问
http://127.0.0.1:8000/items/abcd
有类型的路径参数
#!/usr/bin/env python# -*- coding: utf-8 -*-# @File : test2.py# @Author: 尘心2259# @Date : 2022/1/25 23:07# @Desc :import uvicornfrom fastapi import FastAPIapp = FastAPI()@app.get("/items/{item_id}")async def read_item(item_id: int):return {"item_id": item_id}if __name__ == '__main__':uvicorn.run(app="test2:app", host="127.0.0.1", port=8000, reload=True, debug=True)
- 如果参数不是int类型就会报错
路径函数顺序问题
在创建路径操作时,你会发现有些情况下路径是固定的。
比如 /users/me,我们假设它用来获取关于当前用户的数据.
然后,你还可以使用路径 /users/{user_id} 来通过用户 ID 获取关于特定用户的数据。
由于路径操作是按顺序依次运行的,你需要确保路径 /users/me 声明在路径 /users/{user_id}之前:
#!/usr/bin/env python# -*- coding: utf-8 -*-# @File : test2.py# @Author: 尘心2259# @Date : 2022/1/25 23:07# @Desc :import uvicornfrom fastapi import FastAPIapp = FastAPI()@app.get("/users/me")async def read_user_me():return {"user_id": "the current user"}@app.get("/users/{user_id}")async def read_item(user_id: str):return {"user_id": user_id}if __name__ == '__main__':uvicorn.run(app="test2:app", host="127.0.0.1", port=8000, reload=True, debug=True)
否则,/users/{user_id} 的路径还将与 /users/me 相匹配,”认为”自己正在接收一个值为 "me" 的 user_id 参数。
枚举类型路径参数
#!/usr/bin/env python# -*- coding: utf-8 -*-# @File : test3.py# @Author: 尘心2259# @Date : 2022/1/26 22:41# @Desc :from enum import Enumimport uvicornfrom fastapi import FastAPIapp = FastAPI()class ModelFeature(Enum):name = "尘心"age = "22"like = "美女"@app.get("/models/{model_feature}")async def get_modle(model_feature: ModelFeature):if model_feature == ModelFeature.name:return {"model_feature": model_feature,"message": "可鲁可🦆"}if model_feature.value == "22":return {"modle_feature": model_feature,"message": "22"}return {"modle_feature": model_feature,"message": "美女"}if __name__ == '__main__':uvicorn.run(app="test3:app", host="127.0.0.1", port=8000, reload=True, debug=True)
浏览器访问
http://127.0.0.1:8000/models/22
路径转换器
- 当你有一个路径是 /files/{file_path} ,但是不确定 file_path 到底会取什么值,并不是固定的长度,可能是 /files/home/johndoe/myfile.txt 也可能是 /files/test/myfile.txt ,那怎么办呢?
- 路径转换器出来啦
#!/usr/bin/env python# -*- coding: utf-8 -*-# @File : test2.py# @Author: 尘心2259# @Date : 2022/1/25 23:07# @Desc :import uvicornfrom fastapi import FastAPIapp = FastAPI()@app.get("/files/{file_path:path}")async def read_file(file_path: str):return {"file_path": file_path}if __name__ == '__main__':uvicorn.run(app="test2:app", host="127.0.0.1", port=8000, reload=True, debug=True)
浏览器访问
http://127.0.0.1:8000/files/Users/cx2259/Desktop/Fastapi.mdhttp://127.0.0.1:8000/files/home/test.txt
