精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

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肥魚
相關推薦

2024-04-18 08:39:57

依賴注入控制反轉WPF

2025-02-17 00:00:55

NET開發依賴注入

2011-07-21 13:24:14

java

2024-01-03 08:00:00

Java軟件開發代碼

2011-05-31 10:00:21

Android Spring 依賴注入

2015-10-09 10:32:21

代碼依賴注入強心劑

2009-07-28 15:03:02

依賴性注入

2023-07-11 09:14:12

Beanquarkus

2017-08-16 16:00:05

PHPcontainer依賴注入

2022-12-29 08:54:53

依賴注入JavaScript

2023-10-16 09:30:06

Java代碼

2022-01-07 10:18:15

Python 開發編程語言

2015-09-02 11:22:36

JavaScript實現思路

2022-04-30 08:50:11

控制反轉Spring依賴注入

2019-09-18 18:12:57

前端javascriptvue.js

2023-10-30 18:05:55

Python類型

2022-08-23 14:57:43

Python技巧函數

2022-08-29 00:37:53

Python技巧代碼

2012-03-07 09:02:29

代碼復用

2023-10-17 09:19:34

開發Java
點贊
收藏

51CTO技術棧公眾號

国产精品免费一区| www.欧美三级电影.com| 日韩av片在线看| 嫩草研究院在线| 精品一区二区三区在线观看| 欧美激情2020午夜免费观看| 巨胸大乳www视频免费观看| 成人黄色图片网站| 亚洲成人777| 亚洲精品二区| 女人18毛片水真多18精品| 日韩中文字幕一区二区三区| 欧美日韩第一页| 99在线视频免费| 久久国产精品免费精品3p| 欧美视频一区二区三区四区| 大伊香蕉精品视频在线| jizz日韩| 成人av在线网站| 国产精品亚洲аv天堂网| 国产精品50页| 国产精品久久久久久久久久10秀 | 最近中文字幕一区二区三区| 亚洲大片免费看| 久久66热这里只有精品| 国产精品久久免费| 日韩国产欧美视频| 国内精品久久久久久影视8| 亚洲综合久久av一区二区三区| 欧美激情15p| 日韩一区二区麻豆国产| 久久撸在线视频| 在线男人天堂| 性做久久久久久免费观看| 做爰高潮hd色即是空| 阿v免费在线观看| 99精品久久只有精品| 114国产精品久久免费观看| www.av88| 日日摸夜夜添夜夜添国产精品| 久久久久久久香蕉网| xxxx日本少妇| 97精品国产福利一区二区三区| 亚洲香蕉成视频在线观看| 国产精品手机在线观看| 亚洲码欧美码一区二区三区| 欧美日韩国产成人在线91| 亚洲人成无码www久久久| 男人久久天堂| 欧美日韩国产一区在线| 成人免费观看cn| 成人女同在线观看| 亚洲愉拍自拍另类高清精品| av动漫在线播放| 国产亚av手机在线观看| 亚洲一线二线三线视频| 欧美国产视频一区| av电影院在线看| 午夜一区二区三区视频| 日韩亚洲欧美视频| 6699嫩草久久久精品影院| 性做久久久久久| 久久精品免费一区二区| 88xx成人免费观看视频库 | 91麻豆精品秘密| 精品亚洲一区二区三区四区五区高| 日本毛片在线观看| 91毛片在线观看| 欧美日韩一区二区三区免费| 国产一级免费在线观看| 日本一区二区视频在线| 亚洲免费久久| 黄色视屏免费在线观看| 亚洲免费观看高清在线观看| 妞干网在线播放| 岛国av在线网站| 日韩欧美黄色动漫| 激情 小说 亚洲 图片: 伦| 日韩色性视频| 欧美videos大乳护士334| 国产极品一区二区| 欧美色网址大全| 久久国产精品偷| 久久久久久久伊人| 免费看日韩精品| 91成人在线看| 久草视频在线看| 亚洲人精品一区| 久色视频在线播放| 欧美天堂一区| 亚洲精品www久久久| 黄色激情小视频| 伊人久久婷婷| 国产成人综合精品在线| 国产91视频在线| 久久亚洲私人国产精品va媚药| 欧美 另类 交| 国产中文在线播放| 67194成人在线观看| 特级特黄刘亦菲aaa级| 欧美男gay| 久久成人免费视频| 无码人妻av免费一区二区三区| 国产伦精品一区二区三区视频青涩 | 欧美成年人视频| 四虎成人在线观看| 国产精品一色哟哟哟| 青青草原亚洲| 国产第一页在线| 欧美日韩在线播放三区| 日批在线观看视频| 在线电影一区二区| 国产97免费视| 日韩永久免费视频| 亚洲色图欧美偷拍| 国产小视频精品| 亚洲黄页在线观看| 久久久久久久国产精品视频| 在线视频你懂得| 久久亚洲一区二区三区明星换脸 | heyzo高清国产精品| 欧美天堂一区二区三区| 成年人网站免费在线观看| 欧美日韩精品| 亚洲aa中文字幕| 69久久精品| 色婷婷狠狠综合| 日韩精品人妻中文字幕有码| 这里只有精品在线| 成人美女av在线直播| а天堂8中文最新版在线官网| 天天色综合天天| 亚洲少妇中文字幕| 亚洲一区二区三区无吗| 国产欧美日韩中文字幕在线| 九色在线视频| 一本大道av一区二区在线播放| 久久久无码人妻精品无码| 91精品在线观看国产| 国产欧美一区二区三区久久| 国产日韩精品在线看| 一本一道波多野结衣一区二区| 中国极品少妇videossexhd| 欧美女人交a| 成人欧美一区二区三区在线观看| 日韩精品卡一| 日韩免费福利电影在线观看| 欧美国产日韩在线观看成人| 国产一区二区三区四区五区入口| 在线日韩av永久免费观看| 成人在线中文| 日韩视频免费看| 国产免费久久久| 亚洲欧美日韩成人高清在线一区| 永久免费黄色片| 自由日本语亚洲人高潮| 96成人在线视频| 另类视频在线| 亚洲精品国产精品国自产在线 | 日韩精品一区在线观看| 国产真实的和子乱拍在线观看| 成人丝袜视频网| 97国产精东麻豆人妻电影| 亚洲综合图色| 国产精品久久久久久久午夜 | 97在线观看视频国产| 亚洲欧美一区二区三| 欧美日韩美女视频| 亚洲第一综合网| 久久国产麻豆精品| 少妇高潮大叫好爽喷水| 草草视频在线一区二区| 97在线观看免费高清| 国产中文字幕在线播放| 欧美日韩国产123区| 久久久久亚洲av片无码下载蜜桃| 9l国产精品久久久久麻豆| 88av.com| 一区二区电影在线观看| 国产尤物99| 麻豆精品蜜桃| 欧美激情区在线播放| 三级视频在线播放| 欧美性色黄大片| 久草免费新视频| 久久精品一二三四| 香蕉精品999视频一区二区 | 亚洲精品一二| 亚洲人成77777| 都市激情久久| 国产精品色视频| 美女网站视频在线| 国产一区二区三区在线看| 国内精品久久久久久久久久| 色综合天天综合在线视频| 亚洲 欧美 国产 另类| 91在线免费视频观看| 日本在线观看免费视频| 雨宫琴音一区二区在线| 亚洲第一导航| 久久97精品| 91日韩在线视频| 欧美成人影院| 久久露脸国产精品| 毛片在线播放a| 亚洲欧美一区二区三区在线| 99久久免费国产精精品| 欧美中文字幕一区二区三区 | 91久久在线| 国产手机视频在线观看| 亚洲小说图片视频| 动漫精品视频| 亚洲伊人伊成久久人综合网| 国产91对白在线播放| 性网站在线观看| www.欧美三级电影.com| 国外av在线| 日韩精品在线视频观看| jlzzjlzzjlzz亚洲人| 欧美三级电影网| 潘金莲一级淫片aaaaaa播放| 五月天亚洲精品| 国产精品久久久精品四季影院| 国产欧美日韩不卡免费| 日韩精品卡通动漫网站| 成人美女在线观看| 午夜性福利视频| 国产一区亚洲一区| 色综合五月婷婷| 久久成人免费网| 亚洲精品www.| 美女在线视频一区| 日韩一级片播放| 久久一区激情| 成年人网站大全| 久久精品伊人| 久久久噜噜噜www成人网| 亚洲三级观看| 青青青国产在线观看| 亚洲精品欧美| 日日摸日日碰夜夜爽av| 国产精品日韩| 日韩免费一级视频| 亚洲精品四区| 青青在线视频观看| 免费日韩视频| 欧美一级裸体视频| 视频在线观看一区二区三区| 欧美xxxxx在线视频| 久久精品一区二区国产| 可以免费在线看黄的网站| 日韩不卡免费视频| 熟妇人妻无乱码中文字幕真矢织江 | 国产丝袜欧美中文另类| 国产精品20p| 国产精品久线观看视频| 天天天天天天天天操| 亚洲精品视频在线观看免费| 久久成人在线观看| 亚洲成av人综合在线观看| 日韩激情在线播放| 欧美日韩亚洲视频| 中文字幕+乱码+中文字幕明步| 欧美日韩情趣电影| 精品国产亚洲AV| 亚洲福利视频久久| 欧美3p视频在线观看| 一区二区中文字幕| 超碰在线无需免费| 久久久久久久久久久人体| 日本在线高清| 国产免费观看久久黄| 久久久国产精品入口麻豆| 国产经典一区二区三区| 亚洲动漫在线观看| 亚洲一区二区三区在线观看视频| 欧美一区综合| 午夜精品久久久内射近拍高清| 男人的j进女人的j一区| 色诱av手机版| 久久久久久久久免费| 国产乱子轮xxx农村| 亚洲国产精品尤物yw在线观看| 亚洲天堂男人av| 欧美日本在线一区| 少妇一区二区三区四区| 日韩在线免费av| 国产美女情趣调教h一区二区| 国产精品wwww| 亚洲五码在线| 日韩一本精品| 亚洲特级毛片| wwww.国产| 91香蕉视频在线| 少妇视频一区二区| 欧美日韩国产一区二区| 国产黄色片免费观看| 亚洲天堂成人在线| 欧美人体视频xxxxx| 国产精品福利片| 日韩有码一区| 69精品丰满人妻无码视频a片| 免费视频一区二区三区在线观看| 中文字幕avav| 国产精品丝袜久久久久久app| 久久亚洲精品大全| 欧美日韩国产中文| 日本福利片在线| 欧美日韩高清在线观看| 91精品店在线| 欧美日韩国产三区| 亚洲第一精品影视| 天堂av手机在线| 日本一区二区成人在线| 久久99精品波多结衣一区| 日韩精品一区二区三区蜜臀| 91xxx在线观看| 国产97人人超碰caoprom| 福利片一区二区| 国产欧美自拍视频| 免费高清在线视频一区·| 中文幕无线码中文字蜜桃| 亚洲亚洲精品在线观看| 国产熟女精品视频| xxx一区二区| 欧美成人app| 天堂精品一区二区三区| 一区二区91| 欧亚乱熟女一区二区在线| 一区二区三区在线播| 91午夜交换视频| 一区二区三区 在线观看视| 成人欧美一区二区三区的电影| 九九九久久久| 亚洲精品乱码久久久久久蜜桃麻豆| 乳色吐息在线观看| 亚洲精品一二三| 国产女人18毛片18精品| 久久久国产成人精品| 深夜福利亚洲| 欧美少妇一级片| 精品一区二区免费看| 欧美日韩生活片| 欧美日韩综合在线免费观看| 3d成人动漫在线| 国产精品专区一| 五月天激情综合网| 三级黄色片播放| 亚洲自拍偷拍av| 欧美 日韩 中文字幕| 久久久综合av| 西瓜成人精品人成网站| 国产二区视频在线播放| 久久午夜色播影院免费高清| 加勒比在线一区| 色吧影院999| 日韩av综合| 亚洲一区二区三区av无码| 99精品视频一区二区| 性色av免费观看| www.欧美精品一二三区| 久久9999免费视频| 国产情侣第一页| 久久人人97超碰com| 毛片在线免费播放| 久久精品最新地址| 福利片一区二区| 久久综合久久色| 自拍av一区二区三区| 亚洲男人天堂久久| 国产精品18久久久久久首页狼| 99精品全国免费观看视频软件| 久久精品久久99| 香蕉乱码成人久久天堂爱免费| 男人天堂综合| 91色精品视频在线| 99国产精品私拍| 妖精视频在线观看免费| 日韩一二三区视频| 成人性生活av| 中文字幕中文字幕在线中一区高清| 风间由美性色一区二区三区| 国产寡妇亲子伦一区二区三区四区| 日韩中文字幕av| 爱高潮www亚洲精品| 99免费视频观看| 亚洲国产一区二区在线播放| 久久精品色图| 国产成人精品福利一区二区三区| 免费亚洲一区| 久久久久久激情| 中文国产亚洲喷潮| 日本成人7777| 欧美一级特黄aaa| 欧美午夜激情在线| av在线影院| 天天人人精品| bt7086福利一区国产| 国产精品视频a| 亲子乱一区二区三区电影|