Django darslari (Mukhammad irmatov)


Channel's geo and language: Uzbekistan, Uzbek
Category: Technologies


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

Related channels  |  Similar channels

Channel's geo and language
Uzbekistan, Uzbek
Statistics
Posts filter


O’zbekistonda Python dasturchilarga ish yo’q, amaliyotga ham hech kim olmayapti degan gaplarni eshitib qolaman. O’tgan bir yil ichida, 5 dan ortiq junior dasturchilarga amaliyot o’tash imkoniyatini bergan bo’lsak, deyarli hammasi turli IT kompaniyalarda ishlab yurishibdi. Amaliyot davomida o’zimiz qanday loyihalarda ishlayotgan bo’lsak (pulseev.uz, mockexam.uz, mohirlar.uz, mohirpool), ular ham biz bilan birga o’sha loyihalarda ishlashdi, tajriba orttirishdi.

Amaliyotchi olish, ularga mentorlik qilish va ular bilan loyihalarda birga ishlash shaxsiy tashabbus bo’lib, kimgadir ozgina bo’lsa ham dasturchi sifatida o’sish uchun yordam berish xolos. Amaliyotchilardan ba’zi kompaniyalarga o’xshab 2-3 mln so’m amaliyot o’tash xarajatlari uchun deb pul olmaymiz yoki o’zimizdagi taniqli xalqaro kompaniyalarga o’xshab 3-4 mln so’m pul ham berolmaymiz, to’g’ri tushunish kerak. Ularga maosh taklif qiladigan vaqtlarga ham yetamiz, nasib.

Har doim amaliyotchi olish e’lonini qo’yganimda, doim kimlardir norozi, nimadirlar deb ichidagi alamlarini 'https://t.me/uzpythonjobs/678?comment=306' rel='nofollow'>chiqarib olgisi keladi. To’g’ri tushunish kerak, bitta amaliyotchiga katta loyiha topshirib, tugattirib olish uyoqda tursin, bir o’ziga loyihalar topshirib qo’yilmaydi, doimo u bilan birga darajasi yuqori dasturchi ishlashi, mentorlik qilish talab qilinadi, busiz iloji yo’q. Odamlar o’ylagani kabi, loyihalarni ularga qildirib olib, ketkazib yubormaymiz. Deyarli hamma amaliyotchilarga, amaliyot tugagach ish taklifi berilgan.

O’ylantirayotgan jihati, biz amaliyotchilarga imkoniyat berib xato ish qilyapmizmi, buni to’xtatishimiz kerakmi shunda?

572 0 7 12 31

Forward from: Jakhongir Rakhmonov - IT
Help me help you

Dasturchilikda, va umuman boshqa sohalarda ham, tez o‘rganishning eng yaxshi usullaridan biri bu savollar so‘rash orqali. Ishxonadagi dasturchilardan, chat jipidi akadan, claude opadan, stockoverflowdan, mendan va boshqalardan savol so‘rash orqali tez va to‘g‘ri yo‘nalishda harakatlanish mumkin.

Shaxsan o‘zim va men bilgan ko‘pchilik yordam berishni chin dildan xohlaydi. Juda xursand ham bo‘ladi, agar yordam bera olsa. Lekin hech kim, qaytaraman hech kim, sizning ishingizni siz uchun qilib berishni xohlamaydi.

- Menga rezyume yozib bera olasizmi?

- Mana-bu ishni qila olmayapman, yordam bera olasizmi?

- Shu loyihaning arxitekturasini chizib bera olasizmi?

kabi savollar ochiqsachiga odamga yoqmaydi. Sababi bu va shunga o‘xshash savollarga to‘g‘ri va to‘liq javob berish uchun ancha bosh qotirish va vaqt sarflash talab qilinadi. Undan ham yomoni - savol berayotgan odam shu ishni qilishga yoki savolni to‘g‘ri yozishga erinayotganida.

Men ishda biror kishidan savol so‘rasam, odatda taxminan quyidagicha shaklda ifodalayman:

Salom Alexandro. Men loyihaning shu qismida bir muammoga duch kelyapman. Sen shu qismda juda ko‘p ishlar qilgan ekansan. Bilsang va yordam bera olsang zo‘r bo‘lar edi. Lekin agar boshqa odam yaxshiroq biladi deb o‘ylasang, iltimos o‘sha odamga meni jo‘natvor. Savolim: ‘Shu ishni qilmoqchiman. Uning uchun 3 ta yo‘ldan ketishim mumkin. 1 chisi bunaqa, 2 chisi shunaqa, 3 chisi esa munaqa. Menimcha 2 chi yo‘l eng zo‘ri, chunki shunday qilsam bunday bo‘ladi. Uni qilish mana bu yerda shunday o‘zgarish qilmoqchiman, lekin mana bunday xato chiqyapti. Bilasanmi, qayerda xato qilayotgan bo‘lishim mumkin?’

Mening maqsadim Alexandroga iloji boricha tez va to‘g‘ri javob bera olishi uchun sharoit yaratib berish. Butun contextni tushuntirib berish.

Umuman olganda birovdan nimanidir xohlasangiz, sizga u o‘sha narsani berishi uchun ishini osonlashtirishingiz kerak. Yana bitta misol. Odatda ishxonalarda promotion olishingiz uchun sizning manageringiz siz haqingizda report yozishi kerak va boshliqlarga siz promotionga arzishingizni isbotlab berishi kerak. Bu oson ish emas. Manageringiz siz qilgan ishlarni eslashi, aniq misollar berishi talab qilinadi. Siz manageringizga shu reportni yozib berish orqali katta yordam qilishingiz va promotion jarayonini ancha tezlashtirib berishingiz mumkin. Siz o‘zingiz nima ishlar qilganingizni manageringizdan yaxshiroq bilasiz har holda.

@jakhonrakhmonov


Bir do’stimiz AI asosidagi mikro SaaS startupiga Bosh operatsion direktor (COO) qidiryapti. Bu juda ham zo'r imkoniyat.🔥 Eng muhimi ulush (equity) taqdim etiladi! 🤩

Talablar:
✅ Ulush (equity) taqsimlanadi!
✅ To'liq ish vaqti
✅ Ingliz va rus tillarini yaxshi bilish
✅ Kuchli sotuv va rahbarlik ko'nikmalari
✅ AI va SaaS sohalarida tajriba afzallik hisoblanadi

Saas - Software as a Service.

Agar siz yoki tanishlaringiz qiziqsa, DM orqali murojaat qiling! 🚀

DM 👉 @muhammadali_salohiddinov


A friend of mine is hiring a Chief Operating Officer (COO) for their AI-based micro SaaS startup. It’s a rare chance to lead and scale a cutting-edge company – with equity included! 🤩

Key requirements:
✅ Equity is shared!
✅ Full-time commitment
✅ Fluent in English & Russian
✅ Strong sales and leadership skills
✅ Experience with AI and SaaS is a big plus

Saas - Software as a Service.

If you or someone you know is interested, DM me for more details! 🚀

DM 👉 @muhammadali_salohiddinov


Yakshanba kuni Piskom tog’ining yonbag’rida joylashgan Ispay qishlog’i va sharsharasiga qilgan sayohatimizdan ba’zi suratlarni sizlar bilan bo’lishmoqchiman.

Dasturchi sifatida eng ko’p vaqtimizni kompyuter qarshisida o’tkazamiz, bu o’z navbatida sog’ligimizga salbiy ta’sir qilishi mumkin. Piyoda sayr qilish, ayniqsa, tog’li hududlarga sayohat qilish ham ruhiy, ham jismoniy holatni yaxshilaydi.

Faqat kod yozish va buglarni to’g’irlash bilan band bo’lgan miyamiz toza havo da tiniqlashadi, charchoqlar chiqib ketadi, ko’z ham kompyuter ekranidan uzoqlashib, ancha dam oladi.

Sayohat qiling, salomat bo’ling 🌲


Connection Pooling Pgbouncer nima?

Assalamu Aleykum azizlar!. Men Mukhammad Irmatov postlaridan kelib chiqib Pgbouncer haqida qisqacha ma'lumot berib o'tmoqchi edim.

Yuqoridagi postda aytib o'tilganidak Postrgesql har bir kiruvchi client request uchun connection yaratadi. Har bir connection uchun serverdan joy ajratiladi. Qarabsizki 100ta request va 100ta connection, bundan kelib chiqadiki resource to'ladi va PostgreSQL resourlar to'lguncha request larga connection ochib klientlarga javob bera oladi. Bu model Client-Server arxitekturasi deb nomlanadi, albatta sekin, effektivniy hisoblanmaydi. Shuning uchun Connection pool bizga yordam beradi. Bunga bitta misol PostgreSQL uchun albatta PgBouncer.

Pgbouncer bu Connection pool ga javob beruvchi, klient va DB o'rtasida turuvchi middleware protses hisoblanadi. Mijoz Pgbouncerga ulanadi va bir vaqtda pgbouncer DBga ulanadi. Pgbouncer o'ziga katta miqdorda connection so'rovlarni qabul qiladi va pooling yordamida bazaga bo'lgan haqiqiy connectionlarni kamaytiradi. Bunda http requestlarimiz tez ishlashni ham boshlaydi. Sababi har bir kiruvchi http request uchun yangi haqiqy connection ochilmaydi va yopilmaydi, CPU va Memorydan joy ajratilmaydi, bundan kelib chiqadiki baza requestlarni avvalgi holatiga qaraganda tezroq handling qiladi.

PgBouncerni 3 turdagi pool_mode mavjud.
Bular:
1. Session - mijoz sessiyani uzgandan so'ng connection poolga qaytarib beriladi.
2. Transaction - har bir tugatilgan transactiondan so'ng connection poolga qaytadi.
3. Statement - har bir sql so'rovdan so'ng connection poolga qaytadi.

Connection poolga qaytadi va boshqa kirib keluvchi requestlarga javob berishi mumkun bo'ladi. Ko'pgina hollarda Tranction pool_mode ishlatilish tavsiya beriladi.


Bu odam nima xohlayotganini asl maqsadi nima ekanligini kimdir tushuntirib bera oladimi?

Yuborgan bot linkini hali start qilmadim, qilaveraymi 😅

P.S. Chat egasini ismi ko’rinmasin deb uchirib qo’ydim


Pyramid code example

Pyramid freymvorkida GET va POST metodlarini ishlatishga misol


Pyramid nomli Python frameworki bor, O’zbekistonda unchalik ham mashhurlikka erisholmagan bo’lsada, aslida ancha qulay va ko’p imkoniyatli freymvork hisoblanadi.

Django battery-included (hammasi ichida) freymvork bo’lsa, Pyramid minimalistik freymvork hisoblanadi. Kerakli komponentlar ehtiyojga qarab tanlanadi. Django shunday freymvorkki siz unga moslashishingiz kerak, Pyramid esa sizga moslashadi.

Misol uchun django da ma’lumotlar bazasi bilan ishlash uchun o’zini tayyor ORM bilan ishlashga majbursiz (istisnolar bor), Pyramidda istasangiz SqlAlchemy, istasangiz Pony ORM yoki boshqasini ishlataverasiz.

Python uchun veb freymvorklar juda ko’p, hammasini tagida bitta maqsad yotadi, u ham bo’lsa dasturchiga qulaylik yaratish. Barcha freymvorklarda requestlarni boshqarish, URL routing, database bilan ishlash(CRUD) kabi asosiy vazifalarni o’z ichiga olgan.

Siz ham xuddi shu vazifalarni o’z ichiga olgan freymvorkni o’zingiz Python yordamida yozishingiz mumkin. Mustaqil freymvork yozmoqchi bo’lsangiz Jakhongir Rakhmonov ni “Pythonda veb framework yozish” kursini tavsiya qilaman.


Bugun olx.uz da tozalash(uborka) kunimi deyman, sayti ertalabdan ishlamayapti. CloudFront ni noto’g’ri sozlab qo’yganga o’xshaydi

P.S. Oxirgi vaqtlar olx da juda ko’p shunga o’xshash muammolar bo’lyapti.
Bu xatolik nimadan bo’lishi mumkin?


Connection pooling nima?

Connection Pooling ma’lumotlar bazasiga ulanishlarni(connections) samarali boshqarish uchun ishlatiladi. Database ga yuborilgan har bir so’rov ma’lumotlar bazasida yangi connection ni ochadi va so’rov ga javob berilgach, connection yana yopiladi. Bu jarayon uzluksiz davom etadi, bu esa jarayonni sekinlashishiga olib keladi.

Connection pool esa ma’lumot bazasi bilan bog’langan va so’rov qabul qilishga tayyor bir nechta connectionlarni saqlab turadi. Ma’lumotlar bazasiga so’rov bo’lganda, yangi connection ochmasdan, tayyor connection orqali so’rovlarga javob beradi. Database ga so’rov yakunlangach, tayyor connection yana eski holatda ishlatishga tayyor holatga qaytadi.

Django 5 da yangi qo’shilgan connection pooling va eski versiyalardagi conn_max_age connection poolingni eng oddiy ko’rinishi hisoblanadi. Production uchun app va database orasida pgbouncer ni sozlash tavsiya qilinadi

2.4k 4 11 23 40

Django 5 versiyasiga vanihoyat connection pool qo’shilibdi.

Django da DB bilan amallar tugagandan keyin, connection darhol yopilar edi. Agar DB ga yangi so’rov yubormoqchi bo’lsa, yana qaytadan connection o’rnatish kerak bo’ladi. Bu esa ko’p bo’lmasada vaqt yo’qotilishiga olib keladi.

Eski versiyalarda connection pool ni conn_max_age orqali qisman amalga oshirsa bo’lar edi, aslida bu connection pool ni ta’minlamaydi, ochilgan connection ni ma’lum bir vaqt yopmay ushlab turadi. Bu usulni yomon tarafi shundaki, agar to’g’ri boshqarilmasa, va vaqtida connectionlar yopilmasa connection pool to’lib qolishiga olib keladi va bu esa DB bottlenack ga sabab bo’ladi.

Yuqoridagi barcha muammolarni django 5 versiyasida connection pool qo’shilgani tufayli ancha yengillashadi


Ancha oldin id.egov.uz saytida telefon raqamim bilan ro’yhatdan o’tgan edim. Hech qanday muammosiz identifikatsiyadan o’tib, kirishga muvaffaq bo’lganman. Shu yaqin kunlarda bu tizimga yana ishim tushib, o’sha vaqtda qo’ygan parolim esdan chiqib ketganligi uchun parolni tiklash sahifasini ochdim va JSHSHIR va ro’yhatdan o’tgan telefon raqamimni kiritdim va quyidagicha xatolik oldim.

Ko'rsatilgan telefon raqami Sizga tegishli bo'lmasligi mumkin. Nomingizga rasmiylashtirilgan boshqa telefon raqamini kiritib ko'ring.


Bu telefon raqam o’zimni nomimda emasdi, hayron qoldirgan jihati bu telefon raqam bilan ro’yhatdan o’tish vaqtida muammo bo’lmagan va ancha vaqt bu tizimni ishlatib yurganman. Birdan bunday o’zgarib qolishi hech qanaqa mantiqqa to’g’ri kelmaydi.

Hay mayli qoidasi shunaqa ekanda deb, pasportimga yangi telefon raqam sotib olib, endi parolni tiklayman deganimda esa boshqa xatolikka duch keldim:

Markaziy bazada ma'lumotlar topilmagan. Kiritilgan maʼlumotlarning toʻgʻriligini tekshiring.


Bu qanaqasi bo’ldi deb, call centerga bog’langanimda telefon raqam olayotganda yangi raqamni pasport seriyasiga emas, pasportdagi JSHSHIR ga bog’latib olishingiz kerak ekan 🤯

Oddiy foydalanuvchi telefon raqam sotib olayotgan vaqtda ID tizimi pasport seriyasiga olingan raqam bilan ro’yhatdan o’tolmasligini qayerdan biladi? Shuni odamlar uchun ovoragarchiliklarsiz, qulay qilib qo’ysa ancha vaqt va asablar tejalgan bo’lar edi.

Bu tizim foydalanuchilarni vaqtini sarflab, qiynalib yurishi uchun emas, qaytganga vaqtini tejash uchun yaratilgan emasmidi?

P.S. Uzinfocomda ishlaydigan dasturchilar, parolimni tiklab beringlar kerak bo’lyapti )

3.1k 0 14 33 64

Qiziq savol tug’ildi, bu talabga mos ekanligini qanday aniqlab oladi, ya’ni bu “qobiliyat” ni aniqlash uchun qandaydir kriteria (o’lchov usuli) bormi?

Siz nima deb o’ylaysiz, bunday kompaniyaga ishga kirgan maqulmi yoki aksinchami?

3k 0 6 10 39

Xakerchalar(yoki botlar) mockexam.uz platformasini php da qilingan deb o’ylayapti shekilli. Qandaydir zaif joyini qidiryapti anchadan beri, SQL injection ham, DDOS ham qilib ko’rishdi, hozircha security o’z joyida.

Dastur xavfsizligini ta’minlashda standartlarga amal qilinsa + Cloudflare yoqib qo’yilsa, shuni o’zi 99% hujumlarni to’xtatib qoladi.


ChatGPT ga rahmat, 70-80 % rezyumelar ancha yaxshilanib, to’g’ri formatga tushib qolibdi.

Faqat birgina iltimos rezyumeni wordda va hh.uz generate qilib bergan shablon da qilmanglar )


Bu savolga o’zimda ham 100% ishlaydigan aniq yechim yo’q.
Agar “sizga mana 1 yil, va istalgancha moliyaviy resurs sarflab, shu proyektni qiling”, deganda, ishni avvalo kuchli komanda yig’ishdan boshlagan bo’lardim.

Komandaga eng kamida 1 ta Database engineer, 1 ta DevOps engineer, backend dasturchi va ishni ko’zini biladigan frontend dasturchi olinar edi.

Asosiy texnologiya sifatida FastAPI ni sinab ko’rgan bo’lardim. Boshlanishiga microservice emas, monolit arxitekturani tanlardim. Database uchun relation database masalan Postgresql va connection poolni yaxshilash uchun Pgbouncer. Data partitioning, sharding va scaling kabi database tasklarni barchasini Database engineerga yuklardim.

Caching - backend uchun Redis, front uchun (CDN) Cloudflare maqul variant. Load balancing uchun Nginx va HAProxyni kombinatsiyasi ishlatsa bo’ladi. Load balancerni monolit arxitektura bo’lsada ishlatsa bo’ladi, server ichidagi instance larga traffikni baribir taqsimlash kerak.

Message queue uchun Redis emas, aynan RabbitMQ ni ishlatgan bo’lardim, chunki RabbitMQ aynan queue uchun native tool hisoblanadi. Monitor qilish uchun Prometheus va Grafana kombinatsiyasi va albatta error logs uchun Sentry.

Serverni konteynerlash uchun Docker va Kubernetes kombinatsiyasi va Cloud server esa AWS eng maquli. AWS da ham barchasi uchun alohida servis olinadi(Postgres, Redis Cluster vahokazo) va auto scale funksiyasi yoqiladi.

CI/CD pipeline github yoki gitlab emas, Jenkins orqali amalga oshiriladi. Secure bo’lishi uchun Rate limiting application levelda yoqiladi. Xavfsizlik uchun qo’shimcha ravishda CloudFlare va AWS sozlamalari ham to’g’irlanadi.

4k 0 13 16 27

Nega moliyaviy jihatdan muammosi yo’q, istalgan server resurslarni sotib olishga qodir bo’lgan uzavtosanoat.uz sayti har doim down bo’ladi? Ular ham hech 1 million user bilan load test qilib, qachon down bo’lishini bilib shunga yarasha tayyorgarlik ko’rishadimi?

Agar sizga 1 yil vaqt berib, shu saytni down bo’lmaydigan qilgin deganda qanday yo’l tutgan bo’lardingiz? Qaysi texnologiya va usullardan foydalanib, down bo’lishini oldini olardingiz?


Load testing qilish aysbergni uchi xolos, asosiy qilinadigan ish testdan keyin bo’ladi. Har bir “Nega” degan savollaringizga debug qilib, javob olishga harakat qiling.

Agar database javob berish vaqti oshib ketib, loglarda 504(timeout) error qaytarayotgan bo’lsa, qaysi querylar ko’p vaqtni olyapti, qaysi querylarni optimizatsiya qilish haqida bosh qotirishim kerak deb o’zingizga savol bering.

Agar server CPU va memory ga yuklama 90% dan oshib ketsa, demak server resurslarini oshirish haqida bosh qotirishingiz kerakdir.

Qolgan barcha savollaringizga shoshmasdan, o’ylab javob olishga harakat qiling.

Dasturingiz BUG siz, RPS ingiz har doim baland bo’lsin : )


Rasmdagi grafiklarda locust orqali test qilingan dastur natijalarini ko’rib, server performance haqida ko’p ma’lumot olishimiz mumkin.

1-qatordagi grafikda yashil chiziq bu RPS ko’rsatkichi - Requests Per Second (bir sekundda requestlar soni). Qizil chiziq esa fail bo’lgan so’rovlar soni.

E’tibor bergan bo’lsangiz 1-grafikda qizil chiziqlar 0 bo’lib borgan va RPS 30 ga, bir vaqtda request yuborayotgan foydalanuvchilar soni 1700 ga yaqinlashganda server javob qaytarish vaqti (response time) ko’payib, fail requestlar soni oshib ketgan(4 raqamiga qarang)

5-grafikda esa foydalanuvchilar soni 2200 dan oshib, RPS 38 ga yetganda server butunlay down bo’lib(unhealthy), so’rovlar javob berishni to’xtatgan.

Yuqoridagi grafikdan server bir vaqtda qancha so’rovlarga javob bera oladi yoki nechta user bir vaqtda so’rov jo’natishi mumkin.

Keyingi qilinadigan ish, nima uchun server aynan shu yerga kelganda down bo’lyapti. Qanday omillar bunga sabab bo’lyapti?

20 last posts shown.