fastapi速成2

路径参数与查询参数:

python 复制代码
from fastapi import FastAPI,Path

import uvicorn

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World1"}
# 路径参数演示:
@app.get("/items/{item_id}")
async def read_item(item_id: int = Path(..., gt=0,lt=99,description="范围0-99")):
    return {"item_id": item_id, "message": f"这是 {item_id}"}

@app.get("/xmbl/{name}")
async def get_name(name: str=Path(...,min_length=1,max_length=10)):
    return {"msg":f"my name is {name}"}

#查询参数演示:
@app.get("/aaa/bbb")
async def get_name(skip: int,limit: int = 10):
    return {"skip":skip,"limit":limit}
if __name__ == "__main__":
    # 启动uvicorn服务器,绑定127.0.0.1:8000
    uvicorn.run("test5:app", host="127.0.0.1", port=8000)

Field注释:

python 复制代码
class Token(BaseModel):
    access_token: str = Field(..., description="access token", min_length=1, max_length=20)
    token_type: str
    expires_in: int = Field(..., description="expires time")


@app.post("/test")
async def test(token: Token):
    return token

HTML格式:

python 复制代码
@app.get("/hello", response_class=HTMLResponse)
async def hello_world():
    return "<h1>Hello World</h1>"

文件格式:

python 复制代码
@app.get("/get_file")
async def get_file():
    return FileResponse("./files/an.png")

自定义响应类型:

python 复制代码
class XMBL(BaseModel):
    id: int
    name: str
    type: str


@app.get("/xmbl/{id}", response_model=XMBL)
async def get_xmbl(id: int):
    return {
        "id": id,
        "name": f"第{id}小马的名字",
        "type": "类型"
    }

异常:

python 复制代码
@app.get('/xmbl2/{id}')
async def get_xmbl2(id: int):
    is_list = [1,2,3,4,5,6,7]
    if id not in is_list:
        raise HTTPException(status_code=404,detail="当前id不存在")
    return {
        "id": id
    }

总项目(fastapi项目,创建需要激活,也可以看前一篇文章,是手工创建项目的写法):

main.py

python 复制代码
from fastapi import FastAPI,HTTPException
from pydantic import BaseModel, Field
from fastapi.responses import HTMLResponse, FileResponse

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}


@app.get("/hello/{name}")
async def say_hello(name: str):
    return {"message": f"Hello123 {name}"}


class User(BaseModel):
    username: str
    password: str


@app.post("/register")
async def register(user: User):
    return user


class Token(BaseModel):
    access_token: str = Field(..., description="access token", min_length=1, max_length=20)
    token_type: str
    expires_in: int = Field(..., description="expires time")


@app.post("/test")
async def test(token: Token):
    return token


@app.get("/hello", response_class=HTMLResponse)
async def hello_world():
    return "<h1>Hello World</h1>"


@app.get("/get_file")
async def get_file():
    return FileResponse("./files/an.png")


class XMBL(BaseModel):
    id: int
    name: str
    type: str


@app.get("/xmbl/{id}", response_model=XMBL)
async def get_xmbl(id: int):
    return {
        "id": id,
        "name": f"第{id}小马的名字",
        "type": "类型"
    }

@app.get('/xmbl2/{id}')
async def get_xmbl2(id: int):
    is_list = [1,2,3,4,5,6,7]
    if id not in is_list:
        raise HTTPException(status_code=404,detail="当前id不存在")
    return {
        "id": id
    }

test_main.http

python 复制代码
# Test your FastAPI endpoints

GET http://127.0.0.1:8000/
Accept: application/json

###

GET http://127.0.0.1:8000/hello/User
Accept: application/json

###

依赖注入:

创建依赖项

导入depends

声明依赖项

python 复制代码
from fastapi import FastAPI,Query,Depends

import uvicorn

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}


async def common_parameters(
        skip: int = Query(0,ge=0),
        limit: int = Query(10,le=10),
):
    return {"skip": skip, "limit": limit}


@app.get("/ziyue/test")
async def get_ziyue_test(commons=Depends(common_parameters)):
    return commons

@app.get("/rourou/test")
async def get_rourou_test(commons=Depends(common_parameters)):
    return commons

if __name__ == "__main__":
    # 启动uvicorn服务器,绑定127.0.0.1:8000
    uvicorn.run("test8:app", host="127.0.0.1", port=8000)

ORM(对象关系映射):

pip install sqlalchemyasyncio aiomysql -i https://pypi.tuna.tsinghua.edu.cn/simple/

相关推荐
张居斜21 小时前
GitHub Actions + 阿里云 OSS:OIDC 免密同步构建产物
github·oss·llm-wiki
程序员龙叔1 天前
编写高质量 Skill 系列 -- 如何设计需求分析与用例生成的 SKILL
自动化测试·软件测试·python·软件测试工程师·接口测试·性能测试·skill·ai测试
用户3228360084471 天前
python-rapidjson:用 C++ 速度处理 JSON 的 Python 库
github
逛逛GitHub1 天前
4 个比较实用的 GitHub 开源项目,浅浅的收藏一波。
github
用户8356290780511 天前
使用 Python 操作 Word 内容控件
后端·python
Hommy881 天前
【剪映小助手】添加贴纸接口(Add Sticker)
后端·github·剪映小助手·视频剪辑自动化·剪映api
码云骑士1 天前
32-慢查询排查全流程(下)-索引优化实战与最左前缀原则
python
闵孚龙1 天前
《PyTorch 深度修炼》Dataset 和 DataLoader:数据如何喂给模型
人工智能·pytorch·python
goldenrolan1 天前
A公司物料替代测试系统 v1.7:从需求到 exe/apk 的 AI 辅助全链路实践
android·自动化测试·软件测试·python·ai