İçeriğe geç
python

Python FastAPI CRUD Endpoint

FastAPI ile tam CRUD endpoint implementasyonu. Pydantic model, dependency injection ve hata yönetimi.

By Tolgahan · · 230 görüntülenme
python
from fastapi import FastAPI, HTTPException, Depends, Query
from pydantic import BaseModel, Field, EmailStr
from typing import Optional
from datetime import datetime

app = FastAPI(title="User API", version="1.0.0")

# --- Models ---
class UserCreate(BaseModel):
    name: str = Field(..., min_length=2, max_length=100)
    email: EmailStr
    password: str = Field(..., min_length=8)

class UserUpdate(BaseModel):
    name: Optional[str] = Field(None, min_length=2, max_length=100)
    email: Optional[EmailStr] = None

class UserResponse(BaseModel):
    id: int
    name: str
    email: str
    created_at: datetime

    class Config:
        from_attributes = True

# --- In-memory DB (demo) ---
users_db: dict[int, dict] = {}
next_id = 1

# --- Endpoints ---
@app.post("/api/users", response_model=UserResponse, status_code=201)
def create_user(user: UserCreate):
    global next_id
    # Email benzersizlik kontrolu
    for u in users_db.values():
        if u["email"] == user.email:
            raise HTTPException(status_code=409, detail="Email zaten kayitli")

    new_user = {
        "id": next_id,
        "name": user.name,
        "email": user.email,
        "password": user.password,  # Production'da hash'le!
        "created_at": datetime.now()
    }
    users_db[next_id] = new_user
    next_id += 1
    return new_user

@app.get("/api/users", response_model=list[UserResponse])
def list_users(skip: int = Query(0, ge=0), limit: int = Query(20, ge=1, le=100)):
    all_users = list(users_db.values())
    return all_users[skip:skip + limit]

@app.get("/api/users/{user_id}", response_model=UserResponse)
def get_user(user_id: int):
    if user_id not in users_db:
        raise HTTPException(status_code=404, detail="Kullanici bulunamadi")
    return users_db[user_id]

@app.put("/api/users/{user_id}", response_model=UserResponse)
def update_user(user_id: int, user: UserUpdate):
    if user_id not in users_db:
        raise HTTPException(status_code=404, detail="Kullanici bulunamadi")
    if user.name is not None:
        users_db[user_id]["name"] = user.name
    if user.email is not None:
        users_db[user_id]["email"] = user.email
    return users_db[user_id]

@app.delete("/api/users/{user_id}", status_code=204)
def delete_user(user_id: int):
    if user_id not in users_db:
        raise HTTPException(status_code=404, detail="Kullanici bulunamadi")
    del users_db[user_id]
Bu snippet'i göm
<iframe src="https://tolgahan.dev/snippets/python-fastapi-crud-endpoint/embed" width="100%" height="400" frameborder="0"></iframe>
Paylaş: