国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

FastAPI 依賴注入(Depends):提高代碼復用性

開發
FastAPI 是一個基于 Python 的現代 Web 框架,它不僅語法優雅、支持異步,還擁有強大的依賴注入系統(Dependency Injection)。

FastAPI 是一個基于 Python 的現代 Web 框架,它不僅語法優雅、支持異步,還擁有強大的依賴注入系統(Dependency Injection)。依賴注入能讓我們的代碼模塊化、職責單一、易于擴展,也極大方便了自動化測試。

本文將結合實際場景,系統講解如何在 FastAPI 中:

  • 注入數據庫連接
  • 注入權限校驗
  • 注入請求上下文
  • 優雅編寫單元測試

1. 數據庫連接依賴注入(以 Tortoise ORM 為例)

在 Web 應用中,每個請求都需要與數據庫交互。我們不能將數據庫連接硬編碼在每個視圖中,而是通過依賴注入自動管理事務生命周期。

示例:

# database.py
from tortoise.transactions import in_transaction

async def get_db():
    async with in_transaction() as connection:
        yield connection

通過 yield 的方式,每個請求都會自動管理這個連接的生命周期,執行完畢后自動關閉。

使用方式:

# api/user.py
from fastapi import APIRouter, Depends
from database import get_db

router = APIRouter()

@router.get("/users")
async def get_users(db=Depends(get_db)):
    return await db.execute_query_dict("SELECT * FROM user")

優點:

  • 保證事務一致性
  • 避免重復創建連接
  • 易于測試(可替換 get_db)

2. 權限驗證依賴注入

權限校驗是每個 Web 接口的“守門人”。通過 DI,可以實現靈活、統一的權限控制邏輯。

示例:

# auth.py
from fastapi import Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer
from models import User  # 假設你有一個 User 模型

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/login")

defdecode_token(token: str):
    # 實際項目中請用 JWT 解碼
    if token == "admin-token":
        return {"id": 1, "is_admin": True}
    elif token == "user-token":
        return {"id": 2, "is_admin": False}
    returnNone

asyncdefverify_token(token: str = Depends(oauth2_scheme)) -> int:
    user = decode_token(token)
    ifnot user:
        raise HTTPException(status_code=401, detail="Invalid token")
    return user["id"]

asyncdefadmin_required(user_id: int = Depends(verify_token)):
    user = await User.get(id=user_id)
    ifnot user.is_admin:
        raise HTTPException(status_code=403, detail="Admin only")
    return user

使用方式:

@app.get("/admin")
async def admin_dashboard(current_user=Depends(admin_required)):
    return {"msg": f"Welcome admin {current_user.username}"}

優點:

  • 權限邏輯集中管理
  • 可靈活復用(普通用戶、管理員等)
  • 更易調試和測試

3. 請求上下文注入(IP、UA、Headers)

如果你想記錄用戶 IP、來源、設備信息等,可以封裝一個請求上下文依賴。

示例:

# context.py
from fastapi import Request

async def get_request_context(request: Request):
    return {
        "ip": request.client.host,
        "user_agent": request.headers.get("user-agent"),
        "headers": dict(request.headers)
    }

使用方式:

@app.get("/log")
async def log(ctx = Depends(get_request_context)):
    print(f"來自 {ctx['ip']} 的請求,UA: {ctx['user_agent']}")
    return {"message": "Logged"}

優點:

  • 自動提取請求相關數據
  • 避免在每個接口中手動處理
  • 支持結構化日志、追蹤、限流等高級特性

4. 單元測試更方便(mock 依賴)

使用依賴注入后,每一個外部服務(如數據庫、權限、上下文)都可以在測試中 mock 掉,不再依賴真實服務,非常適合 CI/CD 環境。

示例:

from fastapi.testclient import TestClient
from main import app
from database import get_db

# Mock 數據庫連接
asyncdefoverride_get_db():
    classDummyDB:
        asyncdefexecute_query_dict(self, sql):
            return [{"id": 1, "username": "test_user"}]
    yield DummyDB()

app.dependency_overrides[get_db] = override_get_db
client = TestClient(app)

deftest_get_users():
    response = client.get("/users")
    assert response.status_code == 200
    assert response.json() == [{"id": 1, "username": "test_user"}]

你也可以 override 權限驗證、上下文獲取等依賴項:

from auth import verify_token

# mock 權限校驗返回用戶 id
app.dependency_overrides[verify_token] = lambda: 1

優點:

  • 測試更快,不依賴數據庫
  • 可控輸入輸出,斷言更精準
  • 沒有副作用,測試隔離性強

5. 總結表格

功能點

依賴函數

作用與優點

數據庫連接

get_db

自動管理事務,防止資源泄漏,方便測試

權限校驗

verify_token

校驗登錄狀態,可擴展為 RBAC

請求上下文

get_request_context

自動提取 IP、UA、Headers

單元測試替換依賴

dependency_overrides

隔離依賴項,mock 數據源,適用于 CI 測試場景

6. 總結與建議

FastAPI 的依賴注入系統不僅功能強大,還極其優雅。它能幫助你:

  • 模塊化業務邏輯
  • 隔離接口職責
  • 顯著提升可測試性
  • 構建高可維護的大型應用

無論是構建微服務、后臺管理系統,還是機器學習接口服務,推薦都采用 DI + 類型注解的方式構建接口和服務邏輯,優雅又實用。

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

2025-12-03 10:00:00

依賴注入FastAPI?代碼

2024-04-18 08:39:57

依賴注入控制反轉WPF

2025-02-17 00:00:55

NET開發依賴注入

2011-07-21 13:24:14

java

2011-05-31 10:00:21

Android Spring 依賴注入

2024-01-03 08:00:00

Java軟件開發代碼

2009-07-28 15:03:02

依賴性注入

2015-10-09 10:32:21

代碼依賴注入強心劑

2023-07-11 09:14:12

Beanquarkus

2017-08-16 16:00:05

PHPcontainer依賴注入

2022-12-29 08:54:53

依賴注入JavaScript

2022-01-07 10:18:15

Python 開發編程語言

2023-10-16 09:30:06

Java代碼

2022-04-30 08:50:11

控制反轉Spring依賴注入

2019-09-18 18:12:57

前端javascriptvue.js

2015-09-02 11:22:36

JavaScript實現思路

2012-03-07 09:02:29

代碼復用

2020-03-19 09:00:00

泛型代碼復用率程序運行性能

2023-10-30 18:05:55

Python類型

2022-08-23 14:57:43

Python技巧函數
點贊
收藏

51CTO技術棧公眾號

久久精品国产综合精品| 真人抽搐一进一出视频| 欧美午夜网站| 日韩免费一区二区| 青青草在线播放| 亚洲精品成人悠悠色影视| 久草资源站在线观看| 国产精品91一区二区| 亚洲人成人77777线观看| 日韩香蕉视频| 久久福利电影| 99精品热视频只有精品10| 91网免费观看| 亚洲综合自拍| 91av一区二区三区| 正在播放日韩欧美一页| 国产欧美日韩中文字幕| 国产探花在线精品一区二区| 欧美一区二区三区精品电影| 91精品国产自产精品男人的天堂| 在线观看日韩www视频免费| 擼擼色在线看观看免费| 日韩欧美一区二区免费| 国产鲁鲁视频在线观看特色| 欧美一区国产二区| 欧美xxxx性xxxxx高清| 亚洲精品国产综合区久久久久久久| 永久免费网站在线| 亚洲福利在线视频| 456亚洲精品成人影院| 中文字幕亚洲字幕| 亚洲精品在线播放| 欧美在线视频免费| 国产精品久久久久久久| 国产午夜精品在线| 精品在线亚洲视频| 精品一区二区中文字幕| 成人免费在线播放视频| 天堂av在线免费观看| 欧美一级午夜免费电影| 理论不卡电影大全神| 最近中文字幕2019免费| 欧美在线导航| 国产乱码一区| 国产精品综合二区| 在线观看国产中文字幕| 亚洲午夜在线电影| gogogogo高清视频在线| 色一情一乱一区二区| 欧美午夜寂寞| 精品一区日韩成人| 国产成人高清视频| 精产国产伦理一二三区| 欧美日本不卡视频| 欧美一区=区三区| 国产精品一区=区| 久久精品九九| 美女一区二区三区视频| 色94色欧美sute亚洲线路一ni| 欧美黄色视屏| 97免费在线视频| 国产一区二区三区久久| 国产综合av在线| 日韩欧美在线视频免费观看| 2020av在线| 69影院欧美专区视频| 一区免费视频| 亚洲熟妇av一区二区三区漫画| 午夜精品久久久久久久久久| sm捆绑调教国产免费网站在线观看| 欧美激情一区二区久久久| 狠狠入ady亚洲精品| 青青青青草视频| 色八戒一区二区三区| 黄色成人小视频| 91黄色国产视频| 99精品国产一区二区三区不卡| 深夜福利免费在线观看| 日韩中文字幕在线视频| 黄色工厂这里只有精品| 任你操这里只有精品| 欧美精品在欧美一区二区少妇| 欧美亚洲综合视频| 国产一区二区三区av在线| 久久人人爽人人爽| 日本中文字幕在线2020| 国产精品亚洲综合| 亚洲一级黄色| 91黄在线观看| 一区二区影院| 欧美在线视频一区| 九九热这里有精品| 中文字幕日韩电影| 99精品视频免费| av 日韩 人妻 黑人 综合 无码| 亚洲一区二区影院| yiren22亚洲综合| 久精品国产欧美| 亚洲精选一二三| 成人短视频软件网站大全app| 欧美高清视频一区| 欧美日韩一区二区三区在线免费观看| 四虎影视成人精品国库在线观看| 欧美日韩精品免费看| 一区二区三区在线观看视频| 成人毛片视频在线观看| 亚洲娇小娇小娇小| 国产亚洲精品久久久优势 | 久久精品美女| 亚洲福利视频一区二区| 日本在线视频一区二区三区| 三区精品视频| 欧美日韩国产高清一区二区三区 | 啦啦啦在线视频免费观看高清中文| 亚洲一区二区福利| 性色一区二区三区| 久久久久久青草| 国产福利成人在线| 亚洲欧洲一区二区在线播放| 精品久久国产一区| 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 丰乳肥臀在线| 欧美日韩大片一区二区三区| 欧美日韩在线综合| 欧美激情成人在线| 青青免费在线视频| 成人激情视频网| 精品成人av一区| 97精品一区二区| 天堂中文在线资| 成人自拍偷拍| 欧美精品丝袜中出| 久久综合九色| 视频在线观看入口黄最新永久免费国产| 国产精品久久久久久久久婷婷| 天天操天天干天天综合网| 久久超碰99| 免费黄视频网站| 国产精品看片资源| 狠狠综合久久av一区二区小说| 五月精品视频| 国产高清自拍视频在线观看| 丁香婷婷久久久综合精品国产| 色猫猫国产区一区二在线视频| 国内精品99| 日本不卡影院| 国产精品自拍合集| 美女福利精品视频| 18欧美亚洲精品| 91成人超碰| 黄色网址在线免费播放| 色99中文字幕| 国产一区二区成人| 欧美高清在线一区二区| 精品国产日韩欧美| 1024国产在线| 超碰在线免费观看97| 欧美成人午夜激情在线| 日本一区二区综合亚洲| japanese国产精品| 日本激情在线观看| 欧美日韩dvd| 97精品视频在线| 色综合久久综合| 日日摸夜夜添夜夜添亚洲女人| 成人日韩在线观看| 15—17女人毛片| 国产精华一区二区三区| 精品中文视频在线| 国产精品欧美久久久久一区二区 | 久久福利资源站| 91精品网站在线观看| 女生裸体视频网站免费观看| 国产精品亚洲不卡a| 亚洲视频在线观看视频| 中国av一区二区三区| 欧美在线精品一区| 成人在线免费| 一个人免费观看视频www在线播放 一个人免费视频www在线观看 | 秋霞在线观看av| 国产一区二区视频在线免费观看 | 在线日本中文字幕| 成人免费毛片在线观看| 91精品久久久久久久久久入口| 亚洲国产精彩中文乱码av在线播放| 国产清纯在线一区二区www| 国产精品大片免费观看| 日韩欧美激情| 成人一区二区不卡免费| 国产精品宾馆在线精品酒店| 97中文在线观看| 久久亚洲精品网站| 欧美巨大另类极品videosbest | 国产精品不卡| 国产一区二区精品调教| 写真福利片hd在线观看| 国产又粗又长又爽视频| 亚洲在线一区二区| 欧美丰满老妇厨房牲生活| 欧美一区二区三区播放老司机|