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/

相关推荐
程序员杰哥19 分钟前
依赖于第三方接口时,如何进行测试?
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
java修仙传20 分钟前
从网页禅道到 AI 能调用的工具:我的禅道 MCP 实现思路分享
java·人工智能·python·ai应用·mcp开发
reasonsummer22 分钟前
【办公类-120-01】20260812闵行区幼儿园概况表的数据统计(户籍、五类性质、优抚子女)
前端·python
梦想的旅途240 分钟前
企业微信API实战:Python自动化消息推送
java·前端·python·自动化·企业微信
月光船幽幽44 分钟前
昆仑流形多模态融合新架构
人工智能·python
爱敲代码的憨仔1 小时前
BM25全文检索
开发语言·python·全文检索
SamChan902 小时前
用Python+Requests批量翻译PDF:从脚本到调度
后端·python·microsoft·ai·pdf·机器翻译
草莓熊Lotso2 小时前
【LangChain】核心技术:嵌入模型与向量存储完全指南
服务器·网络·python·langchain
fthux7 小时前
装闭 RenoPit 源码解析(07):装修闭坑知识库与AI Prompt构建
人工智能·ai·开源·github·open source·renopit
leisoo80979 小时前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python