Loyiha strukturasi, settings (.env), exception handler, CORS, Swagger/ReDoc hujjati, testlar, alembic upgrade
10-sinfAdvanced Python Back-end6-hafta · 17-darsSettings va .env
Bir xil format
Yakuniy tekshiruv
Fayl hajmi chegaradan oshsa qaysi status?
Settings va .env
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
app_name: str = "Book API"
debug: bool = False
database_url: str = "sqlite+aiosqlite:///./dev.db"
cors_origins: list[str] = ["http://localhost:3000"]
model_config = SettingsConfigDict(env_file=".env")
settings = Settings()
.env da DEBUG=true yoki CORS_ORIGINS=["https://sayt.uz"] kabi yoziladi. Maxfiy qiymatlar kodda va GitHub da bo'lmasin..env fayli GitHub ga yuboriladimi?
Bir xil format
app.add_middleware(
CORSMiddleware,
allow_origins=settings.cors_origins,
allow_methods=["*"],
allow_headers=["*"],
)
@app.exception_handler(HTTPException)
async def http_error(request: Request, exc: HTTPException):
return JSONResponse(
status_code=exc.status_code,
content={"error": {"status": exc.status_code, "message": exc.detail}},
)
RequestValidationError) shunday handler yozing va 422 qaytaring.CORS nima uchun kerak?
Yakuniy tekshiruv
from fastapi.testclient import TestClient
from app.main import app
client = TestClient(app)
def test_health():
r = client.get("/health")
assert r.status_code == 200
assert r.json() == {"status": "ok"}
def test_not_found_format():
r = client.get("/books/5")
assert r.status_code == 404
assert r.json()["error"]["message"] == "Kitob topilmadi"
pytest -q va alembic upgrade head. alembic current joriy migratsiyani ko'rsatadi.alembic upgrade head nima qiladi?
.env.env.example bilanSozlamalarni doim .env da saqlang.
Sozlamalarni .env dan o'quvchi sinf
Boshqa manzildan so'rovga ruxsat siyosati
Xatoni bir xil javobga aylantiruvchi funksiya
Baza migratsiyalari vositasi
Struktura va Settings.
Xato formati va CORS.
pytest va alembic.
| Tekshiruv | Buyruq yoki joy | Natija |
|---|---|---|
| Testlar | pytest -q | hammasi yashil |
| Migratsiya | alembic upgrade head | xatosiz |
| Hujjat | /docs, /redoc | to'g'ri tavsif |
| Maxfiylik | .gitignore | .env yo'q |
| README | ishga tushirish | yo'riqnoma bor |
Pastga bosing: checklist
pip install pydantic-settings ni bajaring.Settings sinfini yozing va .env yarating.settings.database_url ni bazani ulashda ishlating.
SECRET = "abc123"
SECRET = settings.secret_key
Yakunlash — kod ishlaydi va boshqalar uni ishga tushira oladi.
app_name va debug maydonli Settings yozing..env.example: Maxfiy qiymatsiz .env.example namunasini yozing.{"error": ...} formatida qaytaring.http://localhost:3000 ga ruxsat bering./health uchun test yozing.tags bilan guruhlang..env va Settings; GitHub ga yubormang.
Bir xil JSON, kerakli origin lar.
pytest, alembic upgrade head, Swagger.
Uyga vazifa: Loyihani yakunlash.
Dockerfile va compose
6-hafta · 18-dars