成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

路徑參數限制用 Enum 有多香?FastAPI 實戰講解!

開發
今天我們來介紹一個簡單又實用的技巧 —— 使用 Python 的 Enum 枚舉類限制路徑參數,讓你的接口從“裸奔”變得類型安全 + 文檔清晰 + 自動校驗!

在日常 FastAPI 開發中,我們經常需要定義接口的路徑參數(比如用戶狀態、類型、等級等)。這些參數雖然可以定義為 str,但用戶傳什么你就接收什么,接口既不安全也不優雅。

今天我們來介紹一個簡單又實用的技巧 —— 使用 Python 的 Enum 枚舉類限制路徑參數,讓你的接口從“裸奔”變得類型安全 + 文檔清晰 + 自動校驗!

場景復現:你是否遇到過這些問題?

假設我們有一個接口 /user/{status},要根據用戶狀態查詢用戶列表。

不使用枚舉,你可能這么寫:

@app.get("/user/{status}")
def get_users(status: str):
    if status not in ["active", "inactive"]:
        raise HTTPException(status_code=400, detail="非法狀態值")
    return {"status": status}

看似沒問題,但其實有以下幾個弊端:

  • 沒有類型限制,傳錯值只有運行時才報錯
  • 路徑中該傳啥,接口文檔沒提示
  • 不方便維護,校驗寫死在代碼中

正確打開方式:用 Enum 限定參數取值!

FastAPI 支持原生 Python Enum,用起來很絲滑:

from enum import Enum
from fastapi import FastAPI

app = FastAPI()

class UserStatus(str, Enum):
    active = "active"
    inactive = "inactive"
    banned = "banned"

@app.get("/user/{status}")
def get_users(status: UserStatus):
    return {"msg": f"篩選狀態為:{status.value}"}
  • 訪問 /user/active、/user/banned 沒問題
  • 訪問 /user/unknown 會自動拋出 422 錯誤

為什么它很香?優勢如下:

特性

優勢說明

? 類型安全

只能傳入枚舉中定義的值,自動過濾非法請求

?? 文檔友好

在 /docs 文檔中會自動提示可選值

?? 代碼更簡潔

不需要手動校驗合法值,維護成本低

?? 易擴展

增加/修改狀態只需改一處 Enum 類

?? 更安全

不會因非法參數導致業務邏輯異常

還能配合 Query 使用!

枚舉不僅能用在路徑參數,也能用在查詢參數:

from fastapi import Query

@app.get("/product/")
def get_product(category: UserStatus = Query(...)):
    return {"分類": category}

Enum 的最佳實踐技巧

(1) 繼承 str + Enum

class MyEnum(str, Enum) 會讓枚舉成員在 FastAPI 自動轉為字符串響應,推薦這么寫!

(2) 使用 .value 提取枚舉值

status.value 獲取枚舉實際字符串,不然是 <UserStatus.active> 這種對象

(3) 用于模型字段校驗

class User(BaseModel):
    status: UserStatus

枚舉也能在 Pydantic 模型中使用,自動校驗字段值是否合法!

總結

使用 Enum 限定參數值,雖然是一個小技巧,但它極大提升了:

  • 參數校驗的安全性
  • API 文檔的提示友好度
  • 接口代碼的可維護性和清晰度

可以說,這是每個 FastAPI 項目必學的技巧之一。

責任編輯:趙寧寧 來源: Ssoul肥魚
相關推薦

2021-09-23 05:57:52

Vscode JS 項目

2025-04-07 11:00:00

FastAPI路徑參數接口

2025-05-19 09:30:42

FastAPI接口代碼

2022-06-27 10:26:37

枚舉Java

2010-05-05 17:41:03

IBM Unix

2023-11-02 12:49:00

AI模型

2012-02-15 13:19:04

JavaJava Socket

2009-12-17 15:56:34

Rails參數bind

2023-01-26 23:59:24

Ansibleplaybook列表

2011-05-10 16:44:09

復合機掃描

2023-06-05 18:43:41

GC回收器JDK

2009-10-27 09:26:26

linux系統監控命令

2020-10-28 15:17:08

Go服務超時net

2023-09-04 00:05:27

JMX管理組件

2024-01-08 08:42:43

2023-08-08 00:11:57

命令行工具查詢

2018-04-16 10:12:46

Linux命令gunzip

2023-09-22 16:28:34

C++編程

2010-02-03 17:42:33

C++模板參數

2009-12-28 11:09:25

WPF啟動參數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品视频久久 | 亚洲激情在线观看 | 99久久精品免费看国产免费软件 | 国产性生活一级片 | 日韩视频二区 | 欧美日韩电影免费观看 | 91在线一区| 色婷婷狠狠 | 亚洲福利网站 | 久久综合一区二区 | 久久久久久久av麻豆果冻 | 91亚洲精选| 国产h在线 | 一级黄片一级毛片 | 99re99| 久久亚洲精品国产精品紫薇 | 国产在线精品一区二区三区 | 久久天堂| 国产精品美女久久久久aⅴ国产馆 | 日韩欧美在线播放 | 中文字幕在线看人 | 精品欧美一区二区精品久久久 | 久久久久久免费毛片精品 | 夜夜精品视频 | 欧美一级在线 | 精品91视频 | 久久精品综合网 | 看片国产 | 亚洲一区| 久久久久久久久久毛片 | 午夜精品一区二区三区在线视频 | 91免费入口 | 中文字幕av在线播放 | 综合国产在线 | 91九色视频 | 久久久久久一区 | 国产精品久久二区 | 欧美成人一区二区 | 亚洲欧洲在线观看视频 | 国产精品久久国产精品 | 中文字幕动漫成人 |