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
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]
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]
AI Asistan
Sorularını yanıtlamaya hazır