5-bo'lim

Papkalar va fayllar qanday joylashgan

Loyihaning kod omborini (repository) ochsangiz, birinchi ko'radigan narsa — papkalar tuzilishi. Bu tartib tasodifiy emas: har bir papkaning o'z, aniq vazifasi bor. Quyida — loyihaning haqiqiy tuzilishi, izohlar bilan.

1Eng yuqori daraja

tobb-etu-sport/
├── frontend/ — foydalanuvchi ko'radigan qism (Next.js loyihasi)
├── backend/ — ma'lumot va mantiq qismi (Django loyihasi)
├── vercel.json — frontend+backend'ni bitta serverga birlashtiruvchi sozlama
├── .env.example — qaysi maxfiy sozlamalar kerakligi namunasi
└── README.md — loyiha haqida yozma qo'llanma

Ikkita katta papka — frontend/ va backend/ — bir-biridan butunlay mustaqil ishlaydi, faqat internet orqali (API so'rovlari bilan) gaplashadi. Bu ikkalasini alohida-alohida ochib, hatto alohida rivojlantirish mumkinligini bildiradi.

2frontend/ ichida

frontend/
└── src/
   ├── app/ — HAR BIR SAYT MANZILI (URL) shu yerda bitta papka
   │   ├── sport/ → /sport manzili
   │   ├── turnirlar/ → /turnirlar manzili
   │   ├── reyting/ → /reyting manzili
   │   ├── liderlar/ → /liderlar manzili
   │   ├── yangiliklar/ → /yangiliklar manzili
   │   ├── royxatdan-otish/ → /royxatdan-otish manzili
   │   └── admin/ → /admin/... — boshqaruv paneli, o'zining kichik papkalari bilan
   ├── components/ — qayta ishlatiladigan "detal"lar
   │   ├── ui/ → eng kichik detallar: Button, Badge, Avatar...
   │   ├── home/ → faqat bosh sahifaga tegishli qismlar
   │   ├── sport/ → sport sahifasiga tegishli qismlar
   │   ├── admin/ → admin panelga tegishli qismlar
   │   └── leaderboard/ → reyting bo'limiga tegishli qismlar
   └── lib/ — yordamchi funksiyalar (sana formatlash, backend bilan so'zlashish va h.k.)
🧩

"app" va "components" farqi: app/ — "qayerda" ko'rinishini (manzil/URL) belgilaydi. components/ — "nima" ko'rinishini (tugma, kartochka, jadval) belgilaydi. Bitta komponent (masalan "Button") bir nechta sahifada qayta ishlatiladi.

3backend/ ichida

backend/
├── config/ — butun loyiha uchun umumiy sozlamalar
│   ├── settings.py → baza manzili, xavfsizlik, ulangan bo'limlar ro'yxati
│   └── urls.py → qaysi manzil qaysi bo'limga tegishli
├── core/ — barcha bo'limlar birga ishlatadigan umumiy kod
│   ├── auth.py → kirish/sessiya tekshiruvi
│   ├── roles.py → rollar va huquqlar mantiqi
│   ├── bracket.py → turnir jadvali hisoblash formulalari
│   └── validators.py → parol va boshqa kirishlarni tekshirish qoidalari
└── apps/ — har bir mavzu uchun alohida bo'lim (8 tasi bor)
   ├── accounts/ → talabalar, xodimlar, login
   ├── sports/ → sport turlari, liderlar
   ├── tournaments/ → turnirlar, o'yinlar, natijalar
   ├── teams/ → jamoalar
   ├── gym/ → zalga tashrif so'rovlari
   ├── registrations/ → ro'yxatdan o'tish arizalari
   ├── content/ → yangiliklar, banner, galereya
   └── dashboard/ → reyting, statistika, qidiruv

4Har bir "app" bir xil ichki tartibga ega

Bu — Django'ning eng qulay tomonlaridan biri: har bir bo'lim (masalan tournaments/) ichida DOIM bir xil nomdagi fayllar bo'ladi, shuning uchun istalgan bo'limni tanib olish oson:

FaylNima uchun javobgar
models.pyBu bo'limning ma'lumotlar jadvallari ("blank-formalar")
serializers.pyMa'lumotni frontend tushunadigan formatga o'giradi
views.pyHar bir so'rovga qanday javob berish mantiqi
urls.pyBu bo'limning aniq manzillari (masalan /api/tournaments/)
services.pyBir necha joyda qayta ishlatiladigan hisob-kitob funksiyalari
tests.pyKod to'g'ri ishlashini avtomatik tekshiruvchi sinovlar
migrations/Bazadagi jadvallarning "o'zgarishlar tarixi"

5Misol: "Turnirlar" bo'limi bo'ylab bitta so'rov

Foydalanuvchi /api/tournaments/ manzilini so'raganda, fayllar shu tartibda ishga tushadi:

  1. backend/apps/tournaments/urls.py— manzilni qabul qiladi, tegishli "view" funksiyasini chaqiradi.
  2. backend/apps/tournaments/views.pymodels.pydan kerakli ma'lumotni so'raydi.
  3. backend/apps/tournaments/models.py— ma'lumotlar bazasidan (PostgreSQL) haqiqiy qatorlarni oladi.
  4. backend/apps/tournaments/serializers.py— olingan ma'lumotni frontend tushunadigan JSON formatiga o'giradi.
  5. frontend/src/app/turnirlar/page.tsx— shu JSON'ni oladi va ekranda chiroyli ko'rinishda chizadi.