【fastAPI】简单使用
1:构建一个接口
import uvicorn from fastapi import FastAPI app = FastAPI() """ 构建接口 """ @app.get("/") async def Index(): return {"code":200,"msg":"访问成功"} if __name__ == '__main__': uvicorn.run(app,reload=True, host="127.0.0.1", port=8000)
2:GET获取值
""" GET第一种传值方式 """ @app.get("/get/v1/{item_id}") async def read_item(item_id:str): return {"item_id": item_id}
""" Query类校验 """ # Query:如果找不到page,就以Query的第一参数返回 ...表示必须这个标识,None标识选填 # 请求方式: http://127.0.0.1:8000/get/v2?page=1 @app.get("/get/v2") async def read_items(page: Optional[str] = Query( None, title="文档标题", description="文档描述", max_length=10, min_length=1, regex="^[0-9]$"), ): return {"page": page}
# 请求方式: http://127.0.0.1:8000/get/v3?page=1&page=2 可以是多个值 @app.get("/get/v3") async def read_items(page: Optional[List[str]] = Query(None)): query_items = {"page": page} return query_items # 返回 {"page": ["1","2"]}
""" Path """ # Path与Query 使用方式基本一直 # gt:大于(greater than) # ge:大于等于(greater than or equal) # lt:小于(less than) # le:小于等于(less than or equal)
""" Field """ # 模型属性的类型、默认值及 Field 的代码结构与路径操作函数的参数相同,只不过是用 Field 替换了Path、Query、Body。
3:POST传参
# 创建数据模型 字典类型 class Item(BaseModel): name: str description: Optional[str] = None # Optional 选填参数 price: float class User(BaseModel): name: str @app.post('/api/post1') # Item是json的校验 async def create_item(json: Item): # 参数放在请求体内,传入JSON数据 results = {"json": json} return results # 传参数据: # http://127.0.0.1:8000/api/post1 # { # "name":"MISS", # "description":"TEST", # "price":18.9 # } @app.post('/api/post2') # Item是json的校验 async def create_item(json: Item,User:User,importance: int = Body(...)): # 参数放在请求体内,传入JSON数据 results = {"json": json,"User":User,"importance":importance} return results # 传参数据: # http://127.0.0.1:8000/api/post2 # { # "json":{ # "name":"MISS", # "description":"TEST", # "price":18.9 # }, # # "User":{ # "name":"MISS" # }, # "importance": 5 # }
4:请求HTML模板,文件,图片等
import uvicorn from typing import List from fastapi import FastAPI,Request,File, UploadFile from fastapi.responses import JSONResponse,HTMLResponse,FileResponse from fastapi.templating import Jinja2Templates # 返回HTML模板 app = FastAPI() # 添加请求头参数 修改返回状态码 @app.get("/get") def index(): return JSONResponse(content={"mgs":"index"},status_code=202,headers={"token":"fastapi"}) # 返回HTML模板以及参数 template = Jinja2Templates("pages") # 指定获取目录文件夹 必须在同一级目录 # 请求方式: http://127.0.0.1:8000/get/html?USER=python @app.get("/get/html") def index(req:Request,USER:str): # 也是可以直接添加接收参数的 return template.TemplateResponse('index.html',context={"request":req,"user":USER}) # 请求图片 @app.get("/get/avatar",response_class=FileResponse) async def index(): avatar = 'code.png' return avatar # 接收文件 @app.post("/file") async def create_file(file: bytes = File(...)): return {"file_size": len(file)} # 接收多文件 @app.post("/files") async def create_files(files: List[bytes] = File(...)): return {"file_sizes": [len(file) for file in files]} # 接收文件 @app.post("/uploadfile") async def create_upload_file(file: UploadFile = File(...)): return {"filename": file.filename} # 接收多文件 @app.post("/uploadfiles") async def create_upload_files(files: List[UploadFile] = File(...)): return {"filenames": [file.filename for file in files]} if __name__ == '__main__': uvicorn.run(app,reload=True, host="127.0.0.1", port=8000)
Python全栈(后端、数据分析、脚本、爬虫、EXE客户端) / 前端(WEB,移动,H5) / Linux / SpringBoot / 机器学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!