0Pricing
Python Academy · Ders

Bağımlılık Enjeksiyonu ve Kimlik Doğrulama

Paylaşılan mantık ve JWT tabanlı kimlik doğrulama için FastAPI'nin DI sistemini kullanın.

Bağımlılık Enjeksiyonu ve Kimlik Doğrulama, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.

Bağımlılık Enjeksiyonu Nedir?

FastAPI'nin Depends() işlevi, rota işleyicilerine otomatik olarak eklenen ortak mantığı (veritabanı oturumları, kimlik doğrulama denetimleri, yapılandırma) bildirmenizi sağlar.

from fastapi import FastAPI, Depends
app = FastAPI()

def get_db():
    db = connect_db()
    try: yield db
    finally: db.close()

@app.get("/users")
def list_users(db = Depends(get_db)):
    return db.query_all("users")

Bağımlılık İşlevleri

Bağımlılık, çağrılabilir herhangi bir yapı olabilir. Bir işlev, sınıf veya başka bir bağımlılık kullanan işlev olabilir.

from fastapi import Depends, FastAPI
app = FastAPI()

def common_params(skip: int = 0, limit: int = 10):
    return {"skip": skip, "limit": limit}

@app.get("/items")
def list_items(params: dict = Depends(common_params)):
    return params

@app.get("/users")
def list_users(params: dict = Depends(common_params)):
    return params

Sınıf Bağımlılıkları

İlgili ayarları gruplamak için bir sınıfı bağımlılık olarak kullanın. Sınıf, __init__ bağımsız değişkenleri eklenerek çağrılır.

from fastapi import Depends, FastAPI, Query
app = FastAPI()

class Pagination:
    def __init__(self, page: int = Query(1,ge=1), size: int = Query(10,ge=1,le=100)):
        self.page = page
        self.size = size
        self.offset = (page - 1) * size

@app.get("/items")
def list_items(pag: Pagination = Depends()):
    return {"offset": pag.offset, "size": pag.size}

OAuth2 Password Bearer

Authorization başlığından bir Bearer belirteci okumak için OAuth2PasswordBearer kullanın.

from fastapi import FastAPI, Depends
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()

oauth2 = OAuth2PasswordBearer(tokenUrl="/token")

@app.get("/me")
def me(token: str = Depends(oauth2)):
    return {"token": token}   # validate token here

JWT Belirteçleri

python-jose (veya pyjwt) ile JWT belirteçleri oluşturup doğrulayın. Oturum açıldığında bir belirteç döndürün; korumalı her rotada bunu doğrulayın.

# pip install python-jose passlib
from jose import jwt, JWTError

SECRET_KEY = "change-me"
ALGORITHM = "HS256"

def create_token(data: dict) -> str:
    return jwt.encode(data, SECRET_KEY, algorithm=ALGORITHM)

def verify_token(token: str) -> dict:
    return jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])

Geçerli Kullanıcı Bağımlılığı

JWT'yi doğrulayan ve kimliği doğrulanmış kullanıcıyı döndüren bir get_current_user bağımlılığı oluşturun.

from fastapi import Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer
from jose import jwt, JWTError

oauth2 = OAuth2PasswordBearer(tokenUrl="/token")

def get_current_user(token: str = Depends(oauth2)):
    try:
        payload = jwt.decode(token, SECRET_KEY, algorithms=["HS256"])
        return payload["sub"]
    except JWTError:
        raise HTTPException(status_code=401, detail="Invalid token")

# @app.get("/me")
# def me(user=Depends(get_current_user)): return user

Parola Hash'leme

Parolaları hiçbir zaman düz metin olarak saklamayın. bcrypt ile hash'lemek için passlib kullanın.

from passlib.context import CryptContext

pwd_ctx = CryptContext(schemes=["bcrypt"], deprecated="auto")

def hash_pw(plain: str) -> str:
    return pwd_ctx.hash(plain)

def verify_pw(plain: str, hashed: str) -> bool:
    return pwd_ctx.verify(plain, hashed)

Belirteç Uç Noktası

Form kimlik bilgilerini kabul eden, parolayı doğrulayan ve bir JWT döndüren POST /token uygulayın.

from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import OAuth2PasswordRequestForm
app = FastAPI()

@app.post("/token")
def login(form: OAuth2PasswordRequestForm = Depends()):
    user = get_user_by_username(form.username)
    if not user or not verify_pw(form.password, user.hashed_pw):
        raise HTTPException(status_code=401, detail="Bad credentials")
    token = create_token({"sub": form.username})
    return {"access_token": token, "token_type": "bearer"}

API Anahtarı Kimlik Doğrulaması

Daha basit durumlarda, bir başlıktaki veya sorgu parametresindeki API anahtarını doğrulayın.

from fastapi import Depends, HTTPException, Security
from fastapi.security import APIKeyHeader

API_KEY_HEADER = APIKeyHeader(name="X-API-Key")

def require_api_key(key: str = Security(API_KEY_HEADER)):
    if key != "secret-key":
        raise HTTPException(status_code=403, detail="Forbidden")
    return key

Rol Tabanlı Erişim Denetimi

Bağımlılıklara rol denetimleri ekleyerek izinleri kimlik doğrulamanın üzerine katmanlayın.

from fastapi import Depends, HTTPException

def require_admin(user=Depends(get_current_user)):
    if user.get("role") != "admin":
        raise HTTPException(status_code=403, detail="Admins only")
    return user

# @app.delete("/users/{uid}")
# def delete_user(uid: int, admin=Depends(require_admin)):

Bağımlılık Önbelleğe Alma

Varsayılan olarak bir bağımlılık istek başına bir kez çağrılır ve sonucu, o istekte bağımlılığı kullanan tüm rotalar arasında paylaşılır.

# The same db session object is shared:
@app.get("/summary")
def summary(
    db = Depends(get_db),      # db resolved once
    stats = Depends(get_stats) # get_stats also uses get_db — same db instance
): ...

Hızlı Kontrol

FastAPI'de Depends() ne yapar?

Özet

Paylaşılan mantığı enjekte etmek için Depends(func) kullanın. Kimlik doğrulamayı OAuth2PasswordBearer, JWT belirteçleri ve bir get_current_user bağımlılığıyla oluşturun. Parolaları passlib/bcrypt ile özetleyin. Rol denetimlerini ek bağımlılıklar olarak tanımlayın.

Sıkça Sorulan Sorular

“Bağımlılık Enjeksiyonu ve Kimlik Doğrulama” dersi ücretsiz mi?

Evet — “Bağımlılık Enjeksiyonu ve Kimlik Doğrulama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.

“Bağımlılık Enjeksiyonu ve Kimlik Doğrulama” dersinde ne öğreneceğim?

Paylaşılan mantık ve JWT tabanlı kimlik doğrulama için FastAPI'nin DI sistemini kullanın. Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Python Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Bağımlılık Enjeksiyonu ve Kimlik Doğrulama” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. FastAPI Proje Kurulumu ve İlk Uç Nokta
  2. Yol Parametreleri, Sorgu Parametreleri ve İstek Gövdeleri
  3. Bağımlılık Enjeksiyonu ve Kimlik Doğrulama
  4. Asenkron Uç Noktalar ve Veritabanı Entegrasyonu
← Python Academy Sayfasına Dön