【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)
复制代码

 

posted @   PythonNew_Mr.Wang  Views(456)  Comments(0Edit  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示