偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

路徑參數(shù)限制用 Enum 有多香?FastAPI 實戰(zhàn)講解!

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

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

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

場景復(fù)現(xiàn):你是否遇到過這些問題?

假設(shè)我們有一個接口 /user/{status},要根據(jù)用戶狀態(tài)查詢用戶列表。

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

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

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

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

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

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"篩選狀態(tài)為:{status.value}"}
  • 訪問 /user/active、/user/banned 沒問題
  • 訪問 /user/unknown 會自動拋出 422 錯誤

為什么它很香?優(yōu)勢如下:

特性

優(yōu)勢說明

? 類型安全

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

?? 文檔友好

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

?? 代碼更簡潔

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

?? 易擴展

增加/修改狀態(tài)只需改一處 Enum 類

?? 更安全

不會因非法參數(shù)導(dǎo)致業(yè)務(wù)邏輯異常

還能配合 Query 使用!

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

from fastapi import Query

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

Enum 的最佳實踐技巧

(1) 繼承 str + Enum

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

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

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

(3) 用于模型字段校驗

class User(BaseModel):
    status: UserStatus

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

總結(jié)

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

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

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

責(zé)任編輯:趙寧寧 來源: Ssoul肥魚
相關(guān)推薦

2021-09-23 05:57:52

Vscode JS 項目

2025-05-19 09:30:42

FastAPI接口代碼

2025-04-07 11:00:00

FastAPI路徑參數(shù)接口

2022-06-27 10:26:37

枚舉Java

2010-05-05 17:41:03

IBM Unix

2023-11-02 12:49:00

AI模型

2009-12-17 15:56:34

Rails參數(shù)bind

2012-02-15 13:19:04

JavaJava Socket

2023-01-26 23:59:24

Ansibleplaybook列表

2011-05-10 16:44:09

復(fù)合機掃描

2023-06-05 18:43:41

GC回收器JDK

2009-10-27 09:26:26

linux系統(tǒng)監(jiān)控命令

2020-10-28 15:17:08

Go服務(wù)超時net

2023-09-04 00:05:27

JMX管理組件

2024-01-08 08:42:43

2023-08-08 00:11:57

命令行工具查詢

2023-09-22 16:28:34

C++編程

2018-04-16 10:12:46

Linux命令gunzip

2010-02-03 17:42:33

C++模板參數(shù)

2009-12-28 11:09:25

WPF啟動參數(shù)
點贊
收藏

51CTO技術(shù)棧公眾號