fastapi常用操作

本篇介绍常见的一些api使用场景

获取路径参数

www.baidu.com/user/123, 会获取到id是123

python 复制代码
# 获取路径参数
@router.get("/user/{id}")
async def root(id):
    return {"code": 200, "msg": f"用户{id}"}
    

获取查询字符串

www.baidu.com?id=xxx 即问号后面的参数

python 复制代码
# 获取查询字符串
@router.get("/user")
async def user(id):
    return {"code": 200, "msg": f"用户{id}"}

获取请求头信息

python 复制代码
# 请求头
@router.get("/token")
async def token(id, token=Header(None)):
    return {"code": 200, "msg": f"token:{token}"}

post参数获取

接收post请求的数据

python 复制代码
# post参数获取
@router.post("/post")
def postbody(data=Body(None)):
    return {"code": 200, "msg": f"username:{data.username}"}

多请求合并

这个api用get和post都会路由到这个地方处理

perl 复制代码
# 多请求合并
@router.api_route("/mulreq", methods=["get", "post"])
def mulreq():
    return "success"

流操作

下载文件需要返回文件流

csharp 复制代码
# 流操作
@router.get("/zipfile")
async def zipfile():
    Common.zipfile("./dao", "dao2")
    url = "./dao2.zip"
    return FileResponse(url, filename="dao2.zip")

图片下载和预览

先配置资源目录映射

less 复制代码
app.mount("/img", StaticFiles(directory=Env.getPath(Env.HomeDir, "resources/img")))
csharp 复制代码
@router.get("/avator")
def avator():
    avator = "resources/img/1.webp"
    # 预览图片
    return FileResponse(avator)
    # 下载图片
    # return FileResponse(avator, filename="1.webp")

重定向

python 复制代码
# 重定向
@router.get("/redirect")
async def redirect(id):
    return RedirectResponse("/html", status_code=302)

redis使用

python 复制代码
# 安装依赖
pip install walrus

from walrus import Database as RedisDatabase
db = RedisDatabase(host="localhost", port=6379)
rate = db.rate_limit("speedlimit", limit=5, per=60)  # 每分钟只能调用5次

# 限流
@router.get("/com")
@rate.rate_limited(lambda request: request.client.host)
def com(request: Request):
    return {"code": 200, "msg": "success"}

完整示例

python 复制代码
import asyncio
import time
from typing import List

from fastapi import APIRouter, Request, Header, Body
from fastapi.responses import (
    RedirectResponse,
    FileResponse,
)
from util.base import Common

from laorm.stream import Field, sql, table
from laorm.PPA import PPA

from util.exception import exception

from util.response import AppResult
from pydantic import BaseModel


router = APIRouter(
    prefix="/example",
    tags=["示例代码"],
    responses={404: {"description": "Not found"}},
)





# 获取路径参数
@router.get("/user/{id}")
async def root(id):
    return {"code": 200, "msg": f"用户{id}"}


# 获取查询字符串
@router.get("/user")
async def user(id):
    return {"code": 200, "msg": f"用户{id}"}


# 请求头
@router.get("/token")
async def token(id, token=Header(None)):
    return {"code": 200, "msg": f"token:{token}"}


# post参数获取
@router.post("/post")
def postbody(data=Body(None)):
    return {"code": 200, "msg": f"username:{data.username}"}


# 多请求合并
@router.api_route("/mulreq", methods=["get", "post"])
def mulreq():
    return "success"


# 流操作
@router.get("/zipfile")
async def zipfile():
    Common.zipfile("./dao", "dao2")
    url = "./dao2.zip"
    return FileResponse(url, filename="dao2.zip")


@router.get("/avator")
def avator():
    avator = "resources/img/1.webp"
    # 预览图片
    return FileResponse(avator)
    # 下载图片
    # return FileResponse(avator, filename="1.webp")


# 重定向
@router.get("/redirect")
async def redirect(id):
    return RedirectResponse("/html", status_code=302)

# 限流
@router.get("/com")
@rate.rate_limited(lambda request: request.client.host)
def com(request: Request):
    return {"code": 200, "msg": "success"}
相关推荐
小仙女的小稀罕38 分钟前
听不清重要会议录音急疯?这款常见AI工具听脑AI精准转译
开发语言·人工智能·python
书到用时方恨少!44 分钟前
Python random 模块使用指南:从入门到精通
开发语言·python
第一程序员1 小时前
Python 4.0正式发布:新特性与学习建议
python·github
烛之武1 小时前
SpringBoot基础
java·spring boot·后端
橙序员小站1 小时前
Harness Engineering:从 OpenClaw 看 AI 助理的基础设施建设
后端·aigc·openai
IAUTOMOBILE2 小时前
用Python批量处理Excel和CSV文件
jvm·数据库·python
威联通安全存储2 小时前
破除“重前端、轻底层”的数字幻象:如何夯实工业数据的物理底座
前端·python
Amour恋空2 小时前
Java多线程
java·开发语言·python
小陈工2 小时前
2026年3月28日技术资讯洞察:5G-A边缘计算落地、低延迟AI推理革命与工业智造新范式
开发语言·人工智能·后端·python·5g·安全·边缘计算
智算菩萨2 小时前
【OpenGL】10 完整游戏开发实战:基于OpenGL的2D/3D游戏框架、物理引擎集成与AI辅助编程指南
人工智能·python·游戏·3d·矩阵·pygame·opengl