Выберите регион
и язык интерфейса
Покажем актуальные для региона
Telegram-каналы и возможности
Регион
avatar

Django darslari (Mukhammad irmatov)

DjangoDarslari

Kanalda python, django va backendga aloqador mavzularda postlar bo’ladi.
Author: Software Engineer
Aloqa uchun:
@mukhammad_irmatov
Youtube sahifa:
https://www.youtube.com/channel/UCo-bKPTGuDtjJf9JzjvtgNw/featured

Подписчики
1 460
Просмотры
1 824
ER
124,11%
Посты
266
August 06, 15:27

🖥
Pentium 3 vs elektrokar “Python Full Stack” kursimiz eksperti Muhammad Ermatovning hayoti shunaqa kontrastlardan iborat. Ba’zan ofisda, ba’zan tog‘ cho‘qqisida bo‘ladi. Lekin orada vaqt topib izohlaringizni o‘qishi mumkin
👇
#yuzmayuz @mohirdev

August 06, 15:27
Файлы недоступны
2
Открыть в Telegram

🖥
Pentium 3
vs
elektrokar
“Python Full Stack”
kursimiz eksperti Muhammad Ermatovning hayoti shunaqa kontrastlardan iborat. Ba’zan ofisda, ba’zan tog‘ cho‘qqisida bo‘ladi.
Lekin orada vaqt topib izohlaringizni o‘qishi mumkin
👇
#yuzmayuz
@mohirdev

May 30, 19:08

Oldin barcha loyihalarimda UUID ni ishlatar edim, yaqin 2-3 oydan beri ULID ni ishlatyapman. UUID dan ko’ra ancha qulay, o’qishga ham oson. ULID timestamp orqali yaratilgani uchun indekslar tartibli saqlanadi - insert/read ham UUID dan ko’ra tezroq. Oramizda ULID ni ishlatadiganlar bormi, nima uchun ULID ga o'tgansiz?

May 04, 12:57

https://t.me/birfoizbilim/278

May 04, 12:57

https://t.me/birfoizbilim/278

April 03, 16:10
Файлы недоступны
1
Открыть в Telegram

Oramizda Kwatt ilovasida ishlagan dasturchilar bo’lsa, iltimos Notification tizimiga qarab qo’yinglar, deyarli har doim 5-6 talab notification jo’natadi. Retry tizimi yaxshi ishlamayotgan bo’lishi, FCM tokenlarni saqlashda muammo bo’lishi ham mumkin. Yoki shunchaki, bildirishnoma yuborayotgan admin bir marta yuborish o’rniga knopkani 5-6 martalab bosyapti )

February 27, 17:46

Overengineering — qanday oldini olish mumkin?
Xo‘sh,
overengineering
to‘g‘ri ish emasligi haqida yozdik, lekin real loyihalarda undan qanday qochish mumkin? Muhimi – muammoga qarab emas, balki ehtiyojga qarab kod yozish kerak. Ko‘p hollarda, ortiqcha murakkablik dasturchining kelajakda yuzaga kelishi mumkin bo‘lgan muammolarni hozirdan "hal qilib qo’yish“ istagidan kelib chiqadi. Lekin bunday yondashuv amaliyotda 1 tonna keraksiz kod, oylab vaqtni isrof qilish va qo‘llab-quvvatlash qiyin bo‘lgan arxitektura bilan yakunlanadi.
Shuning uchun ayni vaqtdagi kerakli qismlar va amaliy muammolarni hal qilishga bor e’tiborni qaratish kerak. Minimal ishlaydigan yechim yaratib, keyinchalik uni yaxshilash imkoniyatini saqlab qolish har doim eng yaxshi variant. Endi esa, overengineeringdan qanday qochish mumkin, ko‘rib chiqamiz:
1️⃣
Minimal yechimdan boshlang
Loyiha uchun eng oddiy va aniq ishlaydigan yechimni tanlang. Masalan, yangi ma’lumotlar sinxronizatsiya tizimi kerakmi? Avval oddiy cron job yoki Celery task bilan hal qilib ko‘ring. Agar haqiqatan muammo yuzaga kelsa va real-time sinxronizatsiya zarur bo‘lsa, shundan keyin Redis Pub/Sub, RabbitMQ yoki Kafka kabi murakkabroq yechimlarni o‘ylab ko‘ring.
2️⃣
Haqiqiy muammoga asoslaning
Ko‘p hollarda dasturchilar kelajakda bo‘lishi mumkin bo‘lgan muammolarni oldindan hal qilishga harakat qilib, hozir umuman kerak bo‘lmagan murakkab funksiya va metodlarni qo‘shishadi. Kod yozishdan oldin o‘zimizga savol berishimiz kerak: Bu muammo hozir mavjudmi? Agar yo‘q bo‘lsa, balki hozircha bu yechim kerak emasdir.
3️⃣
KISS va YAGNI prinsiplari
Django yoki boshqa backend dasturlarini yozishda KISS (Keep It Simple, Stupid) va YAGNI (You Ain’t Gonna Need It) prinsiplariga amal qilish kerak. Ortib ketgan abstraktsiyalar, keraksiz servislar yoki mikroxizmatlar loyihani faqat murakkablashtiradi va qo‘llab-quvvatlashni qiyinlashtiradi. Shuning uchun, hali yo’q bo’lgan muammoni hal qilishga urinmang.
4️⃣
Refaktoring va optimallashtirishni bosqichma-bosqich bajaring
Dastlab ishlaydigan, tushunarli va minimal kod yozing, keyin uni yaxshilash haqida o‘ylang. Keraksiz abstraktsiyalar qo‘shishdan oldin, kodni o‘qilishi va qo‘llab-quvvatlanishi oson bo‘lishiga e’tibor bering. Logikani to‘g‘ri modularizatsiya qilib, view, service layer yoki signal kabi qatlamlarni faqat zarur bo‘lsa ajrating. Shu tariqa kod nafaqat ishlaydi, balki keyinchalik kengaytirish va qo‘llab-quvvatlash ham oson bo‘ladi.
5️⃣
Soddalikni ustuvor qiling
Ko‘p hollarda oddiy Django caching (Redis yoki memcached) yetarli bo‘ladi, lekin ba’zilar "scale bo‘lishi mumkin" degan maqsadda Kafka yoki RabbitMQ kabi murakkab queue tizimlarini erta bosqichda qo‘shishadi. Aslida esa, avval oddiy yechim bilan ishlatib ko‘rib, haqiqiy yuk ortganda optimizatsiya qilish yaxshiroq. Har qanday murakkab texnologiya — qo‘shimcha texnik qarz va qo‘llab-quvvatlash boshog’rigi degani.
Xulosa: Overengineering — bu resurslarni, vaqtni va loyihani boshqarishni murakkablashtiradigan muammo. Dastlabki yechimni soddalashtirish, real ehtiyojlarga e’tibor berish va refaktoringni bosqichma-bosqich qilish — bu muammoni oldini olishning eng yaxshi usuli.

February 27, 13:05

Overengineering — Katta muammolarga kichik yechim, kichik muammolarga katta yechim
Dasturchilar loyiha boshlaganda yoki kod yozishda mukammallikni maqsad qilishadi. Har bir funksiya maksimal darajada reusable(qayta ishlatib bo’ladigan) bo‘lishi kerak, har bir mikroservis mustaqil ishlashi kerak, har bir metod kengaytiriladigan bo‘lishi kerak... Va oxir-oqibat, oddiy muammoni hal qilish uchun murakkab, boshqarish qiyin va ortiqcha resurs talab qiladigan arxitektura paydo bo‘ladi.
Bu – Overengineering (ortiqcha muhandislik).
Nega Overengineering muammo?
1️⃣
Tuzilishi qiyin va vaqtni oladi
Tanishlaringizdan biri mehmonlar uchun oddiy choy tayyorlashi kerak. Unga bitta choynak va gaz plitasi yetarli. Lekin u "choy eng optimal haroratda damlansin" deb, termometr, suv filtri, avtomatik choy damlovchi apparat, maxsus vaqt o‘lchagich va qayerdandir IoT bilan boshqariladigan elektr choynak olib keladi. Mehmonlar esa choy kelguncha allaqachon uyiga ketib qolishadi.
Dasturiy ta’minotda ham shunday: oddiy CRUD API uchun event-driven arxitektura, mikroservislar va Kubernetes klaster kerak emas. Eng kerakli narsani tez va samarali qilish muhim.
2️⃣
Texnik qarz yuki
Tasavvur qiling, ofisingizda oddiy bitta eshik bor. Uni ochish uchun oddiy kalit yetarli. Lekin kimdir "bu eshik xavfsiz bo‘lishi kerak" deb, 4 ta qo‘shimcha kod, Face ID, karta skaneri va 2 bosqichli autentifikatsiya qo‘shadi. Boshida bu zo‘r ko‘rinishi mumkin, lekin keyinchalik kalit yo‘qoladi, Face ID ishlamaydi, yangi odamlar kirishi uchun soatlab ruxsat kutishadi va oxir-oqibat eshikni buzib ochishga to‘g‘ri keladi.
Dasturda ham shunday: agar boshlang‘ich darajadagi loyiha uchun ortiqcha murakkab arxitektura yaratsangiz, u kelajakda texnik qarzga aylanadi va uni refaktor qilishga majbur bo‘lasiz.
3️⃣
Resurslar ortiqcha sarflanadi
Sizga kvartira kerak. Lekin "mukammal yashash joyi bo‘lishi kerak" deb, shahar markazida katta villa qurishni rejalashtirasiz. Kredit olasiz, byurokratiya bilan shug‘ullanasiz, qurilish 5 yil davom etadi... oxirida esa kvartira narxi 2 baravar oshib ketadi va siz hali ham ijara to‘layapsiz.
Xuddi shunday, oddiy monolit xizmat qilish mumkin bo‘lgan joyda murakkab mikroservis arxitekturasi, kutilmagan xatolar va ortiqcha operatsion xarajatlar muammoga aylanadi.
4️⃣
Haqiqiy biznes muammolar chetda qoladi
Do‘konda oddiy savdo tizimi kerak bo‘lsa, sotuvchi faqat "Sotish" tugmasini bosishi yetarli. Lekin siz "UI zo‘r chiqsin, AI bilan tahlil qilsin, blockchain bilan ma’lumotlar xavfsiz bo‘lsin" deb murakkab tizim qurib qo‘yasiz. Natijada sotuvchi tugmani bosish o‘rniga, 5 daqiqa shaxsiy kabinetga kirib, API ishlashi kutishiga to‘g‘ri keladi.
Haqiqiy biznesda foydalanuvchi uchun eng sodda va samarali yechim muhim, ortiqcha murakkablik esa faqat vaqt va pul yo‘qotilishiga sabab bo‘ladi.

February 27, 03:15

Ko‘pchiligimiz Django va Python backend'da "best practices" izlaymiz, lekin aslida, yomon amaliyotlar (anti-patternlar) dan qochish hammasidan ko’ra muhimroq. Masalan, CI pipeline umuman bo‘lmasligi, yoki aksincha, 30+ daqiqada test o‘tishi, PR merge qilish uchun butun jamoaning approve berishini kutish — bular jamoaning tezligini pasaytiradi. Gitflow branch strategiyasi esa Django monolit yoki microservice ishlatilayotgan loyihalarda ko‘p hollarda ortiqcha murakkablik olib keladi.
Kod yozishda ham ko‘p xatolar uchraydi. Hamma logikani bitta view ichida yozish – klassik anti-pattern. Django'da 10 ming qatorlik
views.py
yoki
models.py
yozish esa loyiha murakkabligini oshirib, kodni tushunib bo‘lmas holatga keltiradi. Keraksiz abstraksiya qilish – har doim AbstractBaseClassPatternFactoryReactor kabi classlar yozish, lekin u faqat bitta joyda ishlatilishi – bularning hammasi kodni keraksiz darajada murakkab qiladi.
Database bilan ishlashda esa eng katta muammo – Django ORM optimizatsiyasiga e’tibor bermaslik. Ba’zilar har bir request uchun 1000 ta .filter(), .all(), .values() chaqirib, N+1 query muammosini yaratadi. Cache ishlatmaslik – har safar bir xil ma’lumotni qayta-qayta DB’dan olish esa server resurslarini behuda sarflaydi. Har bir mayda o‘zgarish uchun ERD chizish yoki aksincha, katta feature uchun umuman database dizayn qilmaslik ham katta muammolardan biri.
Deployment va loggingda ham xatolar ko‘p. Log yozmaslik – production’da muammo chiqqanda hech qanday dalil topilmasligi, yoki aksincha, kerakmas hamma narsani logga yozib, haqiqiy muammoni topishni qiyinlashtirish – backend'ning asosiy muammolaridan biri. Bundan tashqari, frontend va backend deploy qilish uchun 30 daqiqa kutish, yoki har bir deploy’da eski faylni ustiga overwrite qilib, downtime yaratish, keyin esa rollback imkoniyati bo‘lmaganidan pushaymon bo‘lish – deploymentdagi asosiy xatolar.
Xulosam shuki, best practice degan narsa yo‘q, lekin yomon amaliyotlar juda ko‘p. Django va Python backend'da keraksiz murakkablik, noto‘g‘ri database optimizatsiyasi va yomon deployment jarayonlari eng katta xatolardan hisoblanadi.

February 16, 17:17

Backendchi Deploymentni Bilishi Kerakmi?
Yaqin-yaqingacha backendchi uchun deploymentni bilish shart emas deb o‘ylardim. Chunki oldingi ish joylarimda kamida 2-3 ta DevOps dasturchi bo‘lar edi va bu ishlarni ular bajarardi. Backendchi sifatida kod yozaman, API larni tayyorlayman, qolgani esa DevOps'ning ishi – CI/CD, serverlarni sozlash, security va deployment kabi ishlar ularga tegishli deb hisoblar edim. Bu fikrim 1-1.5 yildan beri teskarisiga o’zgargan.
Oxirgi 2-3 kun ichida Digital Ocean serveriga React ilovasini o‘zim deploy qilib ko‘rdim. Oldin faqat backend applicationlarni deploy qilib, frontend deployment bilan umuman shug‘ullanmaganim uchun bu tajriba men uchun qiziq bo‘ldi. Dastlab Docker bilan build qilib, container'ni Digital Ocean Container registry'ga saqladim, keyin serverda uni pull qilib ishga tushirdim. Natijada deployment vaqti 8-10 daqiqagacha cho‘zildi.
Bundan samaraliroq usul kerak edi. Keyin React’ni shunchaki github actions yordamida build qilib, tayyor fayllarni /var/www/ katalogiga yuklab, Nginx konfiguratsiyasida root va index ni to‘g‘ri ko‘rsatdim. Natija ajoyib bo‘ldi – deployment vaqti 30-40 soniyagacha tushdi!
Biroq bu usulda bitta muammo bor edi: yangi build yuklanayotgan vaqtda eski fayllar ustiga yoziladi va shu orada server ishlamay qolishi mumkin. Zero-downtime qilish uchun CI/CD pipeline yozdim:

Oxirgi 3 ta build saqlanadi – agar yangi buildda xatolik bo‘lsa, avtomatik rollback ishlaydi.

Deployment muvaffaqiyatli o‘tsa, Telegram bot yordamida guruhga bildirishnoma boradi.
Agar sizga CI/CD qismi qiziq bo’lsa,
bu linkka
kirib jarayonni ko’rishingiz mumkin
Xulosa:
— Backendchi deploymentni bilishi kerak. DevOps mutaxassislaringiz bo‘lsa ham, real hayotda backend dasturchining ham deployment jarayonlarini tushunishi va ba’zan o‘zi bajarishi kerak bo‘lib qoladi
— Backend dasturchi har doim professional DevOps darajasida bilimga ega bo‘lishi shart emas, lekin hech bo‘lmasa basic deployment, Docker, CI/CD, server konfiguratsiyasi, loglarni ko‘rish va tahlil qilish kabilarni bilsa, ishi ancha osonlashadi.
— Har doim eng samarali usulni izlash kerak. Oddiy statik fayllarni container ichiga joylash o‘rniga, to‘g‘ridan-to‘g‘ri Nginx orqali serve qilish bir necha barobar tezroq ishlaydi.
Siz qanday deployment usullaridan foydalanasiz?