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
├── 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
└── 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
├── 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:
| Fayl | Nima uchun javobgar |
|---|---|
models.py | Bu bo'limning ma'lumotlar jadvallari ("blank-formalar") |
serializers.py | Ma'lumotni frontend tushunadigan formatga o'giradi |
views.py | Har bir so'rovga qanday javob berish mantiqi |
urls.py | Bu bo'limning aniq manzillari (masalan /api/tournaments/) |
services.py | Bir necha joyda qayta ishlatiladigan hisob-kitob funksiyalari |
tests.py | Kod 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:
- backend/apps/tournaments/urls.py— manzilni qabul qiladi, tegishli "view" funksiyasini chaqiradi.
- backend/apps/tournaments/views.py—
models.pydan kerakli ma'lumotni so'raydi. - backend/apps/tournaments/models.py— ma'lumotlar bazasidan (PostgreSQL) haqiqiy qatorlarni oladi.
- backend/apps/tournaments/serializers.py— olingan ma'lumotni frontend tushunadigan JSON formatiga o'giradi.
- frontend/src/app/turnirlar/page.tsx— shu JSON'ni oladi va ekranda chiroyli ko'rinishda chizadi.