Django darslari (Mukhammad irmatov)
1.46K subscribers
64 photos
15 videos
4 files
69 links
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
Download Telegram
Shu texnologiyalarni bilgan holda kamida $100,000 topsangiz bo'ladi

Hozirgi kundagi trendlarni va vakansiyalarni ko'p kuzatib turaman. Shulardan kelib chiqib quyidagi texnologiyalarni bilsangiz, aynan Backend Engineer sifatida yiliga $100,000 beradigan ishni ortiqcha qiyinchiliksiz topa olasiz degan hulosaga keldim:

- Frontend asoslari: HTML, CSS, JavaScript
- Backend uchun 1ta asosiy va 1ta qo'shimcha til: Masalan Python va Go.
- Backend uchun 1ta katta va 1ta kichik framework: Masalan Django va FastAPI (yoki Flask)
- Database, 1ta SQL va 1ta NoSQL: Masalan PostgreSQL va MongoDB (yoki Cassandra)
- Messaging (Async Communication uchun): RabbitMQ va Kafka
- Cloud servislar: AWS va GCP
- Monitoring servislar: NewRelic va DataDog
- ELK stack: ElasticSearch, Logstash va Kibana

Bularni yozginimcha nimaga bu soha qiyinligini va nega $$ ko'proq berilishini tushinib yetdim🥲

Bu list albatta to'liq emas va yagona yo'l ham emas. Shunchaki o'zimning ohirgi kuzatuvlarimdan kelib chiqib yozdim. Kimdir uchun roadmap tuzib olishda foydali bo'lishi mumkin.

@jakhonrakhmon
👍6
This media is not supported in your browser
VIEW IN TELEGRAM
Mustaqillik bayrami barchamizga muborak bo'lsin!

👉 @djangodarslari
👍2
Ma'lumotlar bazasi (database) nima va u nima uchun kerak?

Deyarli barcha turdagi dasturlar ma'lumotlar bilan ishlaydi. Ma'lumotlarni saqlaydi, o'zgartiradi, o'chiradi va hokazo.

Database (DB) bu shu ishlarni tartibli va samarali usulda qiladigan tizim/dastur.

"Lekin, ma'lumotlarni o'zgaruvchilarda, hashmaplarda, arraylarda ham saqlash mumkinku" deyishingiz mumkin. To'ppa to'g'ri. Ularda ham saqlash mumkin.

Muammo shundaki, ular ma'lumotlarni RAMda saqlaydi va dasturingiz/programmangiz to'xtatilishiga u ma'lumotlar yo'qoladi.

"Agar to'xtatmasakchi? Buni ilojisi borku". To'g'ri. AWS, GCPlarning serverlariga qo'yilsa, shunday qilsa bo'ladi. Ularda svet o'chmaydi. Har qalay serverlari bizda Andijonning Shaxrihon qishlog'ida joylashmagan. Lekin, Amerikalarda ham to'fonlar bo'lib turadi ;) To'xtamagan taqdirda ham RAM odatda chegaralangan bo'ladi.

Demak bizga boshqa bir ma'lumotlarni saqlash usuli kerak.

"Ha, text fayllarda saqlasak bo'ladi" deysizmi? To'ppa to'gri! Kundalikni olib keling.

Muammo shundaki text fayllar yetarlicha murakkab dasturlar uchun to'g'ri kelmaydi. Chunki fayllarda muammolar (synchronization, security va hokazo) ko'p. Hullas ular ma'lumotlar bazasi sifatida ishlatishga mo'ljallanmagan.

Shuning uchun ham mahsus ma'lumotlar bazasi o'ylab topilgan.

Ular fayl shaklida bo'lishi mumkin. Masalan SQLite. Shunda sizning dasturingiz to'g'ridan to'g'ri shu fayl shaklidagi database bilan muloqot qiladi.

Bunday databaselar kichik dasturlar uchun yaxshi qo'l kelishi mumkin. Lekin murakkab dasturlar uchun bunday ma'lumotlar bazasi to'g'ri kelmaydi.

Unday dasturlar uchun boshqa bir dastur ko'rinishidagi databaselar kerak. Bunday databaselarga PostgreSQL, MySQL va SQL Serverlarni misol qilib aytishimiz mumkin. Shunday sizning dasturingiz shu database dasturlar bilan muloqot qiladi. Bu databaselar esa o'zlarining ichida bir nechta fayllarni optimal tarzda boshqaraveradi.

Sizning dasturingiz fayllar bilan gaplashmaydi.

Ana endi savol tug'iladi. SQLite, PostgreSQL va boshqalar bilan dasturlar qanday gaplashadi? Buning uchun computer scientistlar mahsus til o'ylab topgan: SQL. Bu haqida endi boshqa postda bo'ladi.

@JakhonRakhmonBot
👍4👎1
Open Data Challenge
Biz yutdik🥳🥳
2021-yil juda tez o'tib ketgandek, ko'p kitob ham o'qiy olmadim hisob. Kamida 50ga yaqin kitob o'qiyman deb niyat qilgandim, menimcha FIK tushib ketdi yokida kitob o'qishga sarflamoqchi bo'lgan vaqtimni boshqa ishlarga sarfladim. 2021-yilda o'qib tugatgan kitoblarim ro'yhati:

1. Grokking Algorithms - Aditya Bhargava
2. Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow - Aurelien Geron
3. Python Tricks - Dan Bader
4. Mastering Django - Nigel George
5. Strategic Management and Business Policy - Thomas Wheelen
6. Business Communications - Scott McLean
7. Sunniy aqidalar - Sh.Muhammad Sodiq
8. Aqidatut Tahoviya sharxining talhiysi - Sh.Muhammad Sodiq
9. Diqqat chalg'ituvchi dunyoda muvaffaqiyat sirlari - Kel Nyuport
10. The Kite Runner - Khaled Hosseini
11. Paulo Koelo - Alif
12. Brayan Treysi - Samaradorlikning 21 yo'li
13. Atomic habits - James Clear
14. Molxona - George Orwell

2021-yilda kim qanday kitob o'qishga ulgurdi?
👍4
Assalomu alaykum azizlar!

Barchangizga Ramazon Hayiti muborak boʻlsin.

Yetkazganiga shukur 🤲
👍21
This media is not supported in your browser
VIEW IN TELEGRAM
Mohirdev.uz asoschisi Anvar Narzullaev ustozdan ajoyib javob 😅
😁19👍3
Oʻquv markazdagilardan iltimos, oʻquvchi - mijoz jalb qilish uchun odamlarni noreal summadagi oylik bilan qiziqtirmanglar. Oʻquv kursini bitirib, eng koʻpida junior(boshlangʻich) darajasida boʻladi, aksariyat holatlarda esa amaliyotchi statusida yetishib chiqadi. Tajriba orttirish uchun bepulga yoki kam oylikka esa ishlagisi kelmaydi, chunki hayolda 1000$ lik oylikda ishlayman deb reja qilib yurgan.

Bu sohada eng kamida 1 yillik tajriba ega boʻlgach, yaxshi daromadga chiqishni boshlaydi. Yaxshi jihati shundaki, dasturchilar juda tez koʻtariladi(albatta oʻz ustida ishlab borsa). Oʻzbekiston sharoitida 5 yillik senior dasturchi, oʻrtacha 2000$ dollardan koʻproqqa ishlashyapti. Boshqa sohalarga qaraganda bu sohada juda tez oʻsish mumkin, faqatgina davomiy bilim olish va oʻz ustida mehnat qilish kerak xolos.

Xullas, ularga vada emas, amaliy bilim bering!
Aks holda sizning ham soqqakash trenerlardan farqingiz qolmaydi!

👉 @djangodarslari
👍24🔥101
Assalom alaykum hurmatli do'stlar, Pyscript freymvorki haqida eshitgan bo'lsangiz kerak.

Anakonda kompaniyasi tomonidan ishlab chiqarilgan pyscript freymvorki python kodlarini to'g'ridan to'g'ri brauzerda ishlatish imkoniyatini beradi. Bu darsda pyscript freymvorki qanday ishlashini va uni Brython kutubxonasidan farqlarini batafsil ko'rib chiqamiz.

LINK: Youtube
👍17🔥4
Forwarded from Sariq Dev
Junior bo’lib ishga kirish uchun portfolio va CV ning o’zi yetarli emas. Boshqalardan ajralib ham turish kerak.

Menga ham ko’pchilik ish so’rab yozadi, portfoliosiga qarasam 99% odam shablon loyihalar qilgan bo’ladi. O’zidan birorta yangilik qo’shmaydi. Ba’zilar xatto “Lorem ipsum…” shablon matnni ham o’zgartirmaydi.

Bitta narsani tushuning, har kuni minglab o’quv markazlarini minglab talabalar yakunlayapti. Hammasi ish izlayapti. Agar shu bir xil kulrang massa orasida ajralib turmasangiz, ish topishingiz juda-juda qiyin.

Bu postni yozishimga yangi, Ulug'bek ismli stajyorimiz sabab bo’ldi. 3 kun oldin ish so’rab yozgan ekan. Dasturlashni avval o’quv markazida keyin mohirdevda o’qigan.

E’tiborimizni tortgani mohirdev.uz saytining klonini yaratibdi: https://mohirdev-clone.netlify.app/

Protfoliosini ochib qaradik, barcha loyihalariga mehr bilan yondoshgan. Quruq shablon emas, saytlarni ma’lumot bilan to’ldirgan.

Aslida hozirda ishchi olmayotgan bo’lsak ham, suhbatga chaqirdik va boshlanishiga stajyorlik taklif qildik.

Ozgina tajriba orttirsa ishga olib qolamiz. Sababi, ramkadan tashqari firklaydigan, o’z hunarini ko’rsata oladigan hodimlar doimo kerak.

Sizlarga ham maslahatim, ish qidirganda avvalo ajralib turing. Ikkinchidan esa, ishga topshirayotgan kompaniyani o’rganing. Yuqorida aytganimdek, bizni e’tiborimizni tortgani aynan mohirdev kloni bo’ldi. Bu yaxshi taktika. Agar boshqa saytni yuborganda balki birdan rad javob berar edik.
👍15🔥2
Davomiylik yaxshimi yoki intensivlikmi?

Ko'pchilik umrida bir marta bo'lsa ham o'ziga o'ziga quyidagicha qatiy rejalar qo'yib ko'rgan ya'ni ertalab vaqtli uyg'onish, bir kunda kamida 7-8 soat dars qilish va 2-3 soat kitob o'qish. Bu yomon emas, lekin bu motivatsiya va shijoat uzoqqa cho'zilmasligi aniq, chunki inson charchash va toliqishni boshladimi, miyamiz avtomatik ravishda o'sha ishdan bizni chalg'itishni uddasidan chiqadi.

Rasmda ham xuddi shu holat tasvirlangan, ya'ni boshida ko'p energiya sarflab, energiya sarfi kundan kunga kamayib ketgandan ko'ra, kamroq bo'lsa ham davomiy bo'lgani afzal.

Misol, bir kunda o'zingizga ortiqcha yuklama qilib, 7-8 soat dars qilish va yana nechadir soat kitob o'qishni maqsad qilmangda, shuni kunlik 3 -4 soatlik davomiy rejimga tushirib olsangiz, shu sizni baxtingiz.
👍14🔥2
DRF SerializerMethodField qanday ishlaydi?

SerializerMethodField - faqat o'qish uchun (read-only) hisoblanib, serializer klass iga metodni chaqirish orqali qiymatni qo'shib beradi.

SerializerMethodField(method_name=None) 

method_name - serializerda chaqirilishi kerak bo'lgan metodning nomi. Agar qiymat berilmasa, default holatda get_<field_name> ko'rinishida bo'ladi.
Method orqali olingan qiymat serializer obyektga biriktiriladi.

Misollarda ko'radigan bo'lsak ancha tushunarli bo'ladi.

class CommentSerializer(serializers.ModelSerializer):
replies = serializers.SerializerMethodField('get_replies)

class Meta:
model = CommentModel
fields = "__all__"

def get_replies(obj)
queryset = CommentModel.objects.filter(parent_id = obj.id)
serializer = CommentSerializer(queryset, many=True)
return serializer.data

Yuqoridagi kodimizda Comment modeli uchun taxminiy serializer yozdik. Yozilgan komment qismiga, json ko'rinishdagi ma'lumotni yuborayotganimizda bizga kommentda berilgan reply(javob berish) larni ham qaytarishimiz kerak edi, shuning uchun serializermethod field orqali yangi fieldni ham funksiya orqali qo'shib ketdik.
👍5
— Faylni ochish uchun kompyuteringdagi "Mening kompyuterim" ga kirasan.
— Seni kompyuteringga qanday kiraman?
— Yo'q, men seni kompyutering ichidagi "Mening kompyuterim" ni nazarda tutdim.
— Meni kompyuterim ichida seni kompyutering nima qiladi?
— Yuqol-e....

©Alisher Jalolov
😁31
Salom base.html ga queryset qanday ishlatiladi?? Oddiy func orqali qilsa xato bolmaydimi?

Base
.html da queryset orqali ma'lumotlar bazasidagi datani ishlatmoqchi bo'lsangiz, context processorlarni ishlatganingiz maqul.
Context processor o'zi nima?
Context processor — python funksiyasi hisoblanib, contextga dictionary object qaytaradi.

Misol uchun app ichida custom_context_processor.py faylini ochdik va ichiga quyidagilarni yozamiz:

from products.models import Product, Category

def data_available(request):
product = Product.objects.all()
category = Category.objects.all()

context = {
"product": product,
"category": category,
}
return context

Tayyor bo'lgan context processor ni istalgan template mizda ishlatsak bo'laveradi.
👍10
Rekursiv serializer qanday qilinadi?

Misol uchun sizda Product modeli bor, unga sharh (review) yozish funksiyasi qo'shilgan. Sharh yozilgandan keyin, reviewga javob berish imkoniyati ham bo'lishi kerak. Ya'nikim bir foydalanuvchi review yozsa, uning reviewsiga boshqa foydalanuvchi javob bera olishi kerak. Buni biz ichma-ich (nested) joylashgan serializer ko'rinishida chiqaramiz.
 "reviews": {
[
"id":1,
"author": User1,
"review":"Bu mahsulot menga juda yoqdi",
"parent": null,
"all_replies":[
{
"id":2,
"author": User2,
"review":"Narxi qanchekan man ham olmoqchidim",
"parent": 1,
} ]
] }

Ko'rib turganingizdek, 2-review 1-reviewga parent orqali bog'lan(parent: 1).

Avval modeldan boshlaymiz.

class Review(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
parent = models.ForeignKey("self", related_name="all_replies", on_delete=models.CASADE, null=True, blank=True)
review = models.TextField(max_length=400)

bu yerda hammasi odatdagidek model, faqatgina Review modeliga parent ni qo'shdik, rekursiv ya'ni o'z-o'zidan takrorlanishi uchun ForeignKey orqali "self" qilib belgiladik.

Agar asosiy review bo'ladigan bo'lsa, u boshqa reviewlar ichida bo'lmasa, demak parent=null bo'ladi. Agar u boshqa reviewga javob sifatida yozilgan ya'ni bog'langan bo'lsa, parent o'sha bog'langan reviewni id sini oladi.

Serializers fayliga o'tadigan bo'lsak.

class ReviewSerializer(serializers.ModelSerializer):
author = AuthorSerializer(read_only=True)
all_replies = serializers.SerializerMethodField()

class Meta:
model = ProductReview
fields = ["id", "author", "review", "parent", "all_replies" ]

@staticmethod
def get_all_replies(obj):
queryset = Review.objects.filter(parent_id=obj.id)
serializer=ReviewSerializer(queryset, many=True)
return serializer.data

Kodimizni 1-qatoridan boshlaydigan bo'lsak, author fieldini yaratilishi kerak bo'lgan AuthorSerializer ga bog'ladik. all_replies fieldini SerializerMethodField orqali shu reviewga yozilgan boshqa reviewlarni olamiz. Uning uchun filter orqali parent_id si review id siga teng bo'lgan reviewlarni saralab olamiz.

Review.objects.filter(parent_id=obj.id)

Quyidagi kodda esa, Reviewserializerimiz ko'p qiymatlarni qabul qila olishi uchun many=True qildik.
serializer=ReviewSerializer(queryset, many=True)

P.S. Katta mavzuligi uchun iloji boricha qisqartirib olindi.
👍14🔥1
Validatsiyani faqatgina frontendni o'zidagina amalga oshirsa bo'laveradimi?

Tasavvur qiling maxfiy binoda maxfiy yig'ilish bo'lyapti, u yerga faqatgina belgilangan odamlargina kirishi kerak. Binoga kirish tartibi qanday bo'lar edi?
Eshik tagida kamida 2 ta xodim pasport rasmingizni siz bilan solishtirib, chaqirilganlar ro'yhatida bormisiz yoki yo'qmi va kerak bo'lsa nimadir shubhali buyum olib kirib ketmayapsizmi unisini ham tekshirishar, keyin sizni yana xuddi shu tartibda yana 2 ta xodim kutib olib, yuqoridagi tekshiruvni yana bir marta amalga oshirishar edi. To'g'rimi?

Frontend va Backend validatsiyani solishtiradigan bo'lsak, frontend qismi bu xuddi faqatgina pasport bilan qiyofani tekshirib, bir-biriga mos kelganda ruxsat bersa, backend qismi bu ro'yhatga qarab agar chaqirilganlar ro'yhatida borligini va nimadir shubhali buyumlar olib kirib ketmayotganligini ham tekshirib, oxirida ruxsat beradi deb tasavvur qilsak bo'ladi.

Aytmoqchi bo'lganim, frontend validatsiyani chetlab o'tish imkoniyati bor. Brauzerdegi javascriptni o'chirib qo'yish yoki validatsiya kodini o'zgartirib turib, uni chetlab o'tish mumkin. Backendchilarda "Hech qachon user jo'natayotgan ma'lumotga ishonma" degan gap bor. Frontend dan kelayotgan nimaiki ma'lumot bo'lsa uni tekshirib, validatsiyadan o'tkazish kerak. Frontend orqali turli xil, bazani ishdan chiqaradigan zararli kodlar jo'natilishi va serveringizni uxlatib ketishi ham mumkin).

Xulosa qilib aytganda, frontend validatsiya bu foydalanuvchi qulayligi uchun, unga yo'l yo'riq ko'rsatib turish uchun, backend validatsiya esa asosan xavfsizlik uchun kerak.
👍19🔥3
#savolcha

Django ORM dagi Select_related bilan prefetch_related ni qanday farqlari bor?
#Savol:
Assalomu alekum. Bir firmaga Django App qilib berayotgan edim. Oizm Junior bolganim uchun uncha yaxshi tushunmadim. Xullas dasturda bir nechta guruhlar boladi. Teamlarga Team Leaderlar javobgar boladi va ularning Teamlarida 6- tadan userlar boladi. Savolim qanday qilib Teamlar uchun User Model yasasam boladi va ularning Team memberlarini ham qoshishim kerek. Aytgancha Team Memberlarini ham oznini akkaunti boladi, buni google va stackoverflow dan ham topa olmadim. iltimos shunga yordam bersangiz yoki qayerdan bilib olishni ko'rsatib yurobsangiz! Javobingizni kutib qolaman. Javob uchun Oldindan raxmat!

#Javob
Agar teamlar hammasi alohida alohida bo'ladigan bo'lsa, ya'ni Team1, Team2, Team3 ko'rinishida bo'lsa, team uchun bitta model tayyorlab, unga userlarni many-to-many qilib bog'laysiz, user larni permission orqali nimalar qila olishini boshqarishingiz mumkin.

Taxminiy model:

class User(models.Model):
*name - CharField
*email - EmailFIeld
*user_role - choice (oddiy user, team leader)

class Team(models.Model):
*name - charField
*users = ManyToManyField(User, related_name=teams)

Har bir komandada 6 tadan user qo'shish uchun limit kiritishni save methodini override qilib amalga oshirsa ham bo'ladi.
👍20🔥1
#Savol

Assalomu aleykum, task management app qilayotgan edim. App da proyektlar, tasklar va user lar bo'ladi.
🔹Bitta projectda bir nechta foydalanuvchilar bo'lishi mumkin
🔹Bitta projectda bir nechta tasklar bo'lishi mumkin
🔹Bitta taskka faqatgina bittagina user biriktirilishi mumkin.
Userni djangoni o'zining User modelidan foydalanmoqchiman model qismida yordam kerak edi. Oldindan rahmat

#Javob
From django.contrib.auth.models import User

class Project(models.Model):
name = models.CharField(max_length=100)
users = models.ManyToManyField(User)

class Task(models.Model):
project = models.ForeignKey(Project, related_name='project_tasks')
name = models.CharField(max_length=300)
bajaruvchi = models.ForeignKey(User, related_name='tasks')

Ma'lum bir proyektda qatnashayotgan barcha user larni bilish uchun
🔸proj = Projects.objects.get(name="magazinApp")
users = proj.users.all()

Ma'lum bir projectdagi barcha tasklarni ko'rish uchun
🔸 tasks = proj.projects_tasks.all()
project_tasks kalit so'zini Task modelida project modeliga bog'lashda related_name qismida ishlatganmiz.

Ma'lum bir foydalanuvchi qatnashayotgan barcha tasklarni ko'rish uchun
🔸u = User.objects.get(username="birorusername")
u.tasks.all()
tasks kalit so'zini Task modelida bajaruvchi fieldi ichida related_name bilan kiritib ketganmiz.
👍8🤩1
#savol
Qanday qilib bazadan olingan querysetni Viewda Json formatda Response qaytarish mumkin.

#javob
Avval modeldan istalgancha queryset olinib, values orqali Response qaytarish mumkin
Misol uchun Product model bor, DB dagi barcha productlarni Json formatda jo'natish kerak

class ProductListView(APIView):

def get(self, request):
products =
Product.objects.all().values("id", "name", "price")
products_count = products.count()
return Response({"products": products, "products_count": products_count})
👍9