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 sqlalchemy[asyncio] aiomysql -i https://pypi.tuna.tsinghua.edu.cn/simple/

相关推荐
花酒锄作田几秒前
SQLAlchemy中使用UPSERT
python·sqlalchemy
SoleMotive.1 分钟前
一个准程序员的健身日志:用算法调试我的增肌计划
python·程序员·健身·职业转型
亓才孓9 分钟前
[Properties]写配置文件前,必须初始化Properties(引用变量没执行有效对象,调用方法会报空指针错误)
开发语言·python
Bruk.Liu14 分钟前
(LangChain 实战14):基于 ChatMessageHistory 自定义实现对话记忆功能
人工智能·python·langchain·agent
宇宙帅猴27 分钟前
GitHub 私有仓库认证完整指南:告别密码错误,使用 PAT 令牌
github
大江东去浪淘尽千古风流人物29 分钟前
【VLN】VLN(Vision-and-Language Navigation视觉语言导航)算法本质,范式难点及解决方向(1)
人工智能·python·算法
Swift社区31 分钟前
Gunicorn 与 Uvicorn 部署 Python 后端详解
开发语言·python·gunicorn
Coinsheep35 分钟前
SSTI-flask靶场搭建及通关
python·flask·ssti
IT实战课堂小元酱35 分钟前
大数据深度学习|计算机毕设项目|计算机毕设答辩|flask露天矿爆破效果分析系统开发及应用
人工智能·python·flask
码农阿豪36 分钟前
Flask应用上下文问题解析与解决方案:从错误日志到完美修复
后端·python·flask