FastAPI Backend Development Bootcamp · Lekcja

Wstrzykiwanie typowych zależności

Zaimplementują Państwo typowe zależności dotyczące sesji bazy danych, uwierzytelniania użytkowników lub współdzielonej konfiguracji między endpointami.

Lekcja 2 z 411 kroki

Wstrzykiwanie typowych zależności to bezpłatna lekcja FastAPI Backend Development Bootcamp na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej FastAPI Backend Development Bootcamp, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs FastAPI Backend Development Bootcamp zawiera 4 lekcji w sumie.

Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.

Intro to Common Dependencies

In FastAPI, dependencies are powerful. They help you share logic, manage resources, and keep your code clean.

Common dependencies are functions or classes that you reuse across many API endpoints. This prevents repetitive code and makes your application easier to maintain and test.

Think of them as reusable building blocks for your API.

Injecting Shared Configuration

Many applications need global settings, like API keys or database URLs. By injecting configuration, you can easily access these settings in any endpoint without resorting to global variables.

This keeps your configuration flexible and easy to update.

Demo: Simple Config Dependency

Let's create a dependency that returns a simple settings dictionary. In a real application, this might load from environment variables using Pydantic's BaseSettings.

from fastapi import FastAPI, Depends

app = FastAPI()

# This function acts as our dependency
def get_settings():
    return {"app_name": "CoddyKit API", "version": "1.0.0"}

@app.get("/info")
def read_info(settings: dict = Depends(get_settings)):
    return {"message": f"Welcome to {settings['app_name']} v{settings['version']}"}

# To run this:
# 1. Save as main.py
# 2. Run 'uvicorn main:app --reload'
# 3. Go to http://127.0.0.1:8000/info

Database Session Management

A common task for backend APIs is interacting with a database. Each request typically needs its own unique database "session" or connection.

Managing these sessions manually in every endpoint is tedious and error-prone. A dependency can handle creating and closing them automatically for you.

Demo: Database Session Dependency

Here's a simplified example of a get_db dependency. In a real application, this would connect to a database using an ORM like SQLAlchemy.

The yield keyword is key here!

from fastapi import FastAPI, Depends
from typing import Generator

app = FastAPI()

# This simulates a database session.
# In a real app, this would be a SQLAlchemy session.
class MockDBSession:
    def __init__(self):
        print("Opening DB session...")
    def close(self):
        print("Closing DB session...")
    def query(self, item_id: int):
        return {"id": item_id, "name": f"Item {item_id}"}

def get_db() -> Generator:
    db = MockDBSession()
    try:
        yield db  # This is where the endpoint gets the 'db' object
    finally:
        db.close() # This runs after the request is finished

@app.get("/items/{item_id}")
def read_item(item_id: int, db: MockDBSession = Depends(get_db)):
    # The 'db' object is provided by the dependency
    return db.query(item_id)

# To run this:
# 1. Save as main.py
# 2. Run 'uvicorn main:app --reload'
# 3. Go to http://127.0.0.1:8000/items/1

The Magic of `yield`

The yield keyword in our get_db function is very important.

  • Code before yield runs before the endpoint function. This is for setup (e.g., opening a database connection).
  • Code after yield runs after the endpoint function and its response. This is for teardown (e.g., closing the connection).

This pattern is called a "dependency with yield" or a "context manager dependency".

Injecting User Authentication

Most APIs need to know who is making a request. Authentication dependencies extract user information from request headers (like an API key or JWT token) and make it available to your endpoints.

This keeps your authentication logic separate and reusable across many routes.

Demo: Current User Dependency

Here's a basic dependency that simulates getting the current user. In a real application, this would involve validating a token from the request headers.

If the user isn't authenticated, it can raise an HTTPException to stop the request early.

from fastapi import FastAPI, Depends, HTTPException, status
from typing import Optional

app = FastAPI()

class User:
    def __init__(self, username: str, email: Optional[str] = None):
        self.username = username
        self.email = email

# This dependency simulates fetching the current user
def get_current_user(token: str = "some_valid_token") -> User:
    # In a real app, 'token' would come from request headers
    # and be validated against a database or auth service.
    if token != "some_valid_token":
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Invalid authentication credentials",
            headers={"WWW-Authenticate": "Bearer"},
        )
    return User(username="jane_doe", email="jane@example.com")

@app.get("/me")
def read_current_user(current_user: User = Depends(get_current_user)):
    return {"username": current_user.username, "email": current_user.email}

# To run this:
# 1. Save as main.py
# 2. Run 'uvicorn main:app --reload'
# 3. Go to http://127.0.0.1:8000/me

Chaining & Reusing Dependencies

Dependencies can also depend on other dependencies! This allows for complex logic to be broken down into smaller, manageable pieces.

For example, a "current admin user" dependency might first depend on "current user", then check if that user has admin privileges.

This modularity is a core strength of FastAPI's dependency injection.

Check Your Understanding

Consider the following FastAPI dependency:

from fastapi import HTTPException, status

def check_api_key(api_key: str = "SECRET_KEY"):
    if api_key != "VALID_API_KEY":
        raise HTTPException(
            status_code=status.HTTP_403_FORBIDDEN,
            detail="Invalid API Key"
        )
    return True

If an endpoint uses Depends(check_api_key) and a request comes in without the correct API_KEY, what will happen?

Common Dependencies: Key Takeaways

We've explored how to inject common dependencies in FastAPI:

  • Configuration: Share application settings easily across endpoints.
  • Database Sessions: Manage database connections per request using yield for proper setup and teardown.
  • User Authentication: Centralize logic for identifying and validating users.

Dependencies promote clean, reusable, and testable code by keeping cross-cutting concerns separate from your main endpoint logic.

Bezpłatny start

Ucz się FastAPI Backend Development Bootcamp dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
21
Lekcje
84

Często zadawane pytania

Czy lekcja „Wstrzykiwanie typowych zależności” jest bezpłatna?

Tak — pełny tekst „Wstrzykiwanie typowych zależności” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu FastAPI Backend Development Bootcamp, przejdź na CoddyKit PRO. Kurs FastAPI Backend Development Bootcamp zawiera 4 lekcji w sumie.

Co nauczysz się w „Wstrzykiwanie typowych zależności”?

Zaimplementują Państwo typowe zależności dotyczące sesji bazy danych, uwierzytelniania użytkowników lub współdzielonej konfiguracji między endpointami. Ćwiczysz FastAPI Backend Development Bootcamp z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć FastAPI Backend Development Bootcamp?

Nie wymagamy żadnego doświadczenia. FastAPI Backend Development Bootcamp w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Wstrzykiwanie typowych zależności”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji FastAPI Backend Development Bootcamp?

Tak. Każda lekcja FastAPI Backend Development Bootcamp zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Zależności w FastAPI
  2. Wstrzykiwanie typowych zależności
  3. Zależności oparte na klasach i yield
  4. Globalne zależności i zależności podrzędne
← Powrót do FastAPI Backend Development Bootcamp