Mavzu
Dars xulosasi
- Har qanday professional dasturiy ta'minot minimal Texnik topshiriq (TT) va tizimdagi rollarni (Guest, User, Admin) aniqlashdan boshlanadi.
- Relyatsion ma'lumotlar bazasini loyihalash (ERD) — jadvallar va ular orasidagi bog'lanishlarni (1-N, N-N) to'g'ri belgilash dasturning kelajakdagi xavfsizligi va tezligini kafolatlaydi.
CategoryvaPosto'rtasidagi bog'lanishdamodels.PROTECTishlatiladi, bu esa maqolalari bor kategoriyaning tasodifan o'chib ketishini oldini oladi.- Virtual muhit (
venv) — Python kutubxonalarining global operatsion tizimdan ajratilgan, mustaqil muhitidir. - Maxfiy ma'lumotlar (
SECRET_KEY, baza parollari, API kalitlari) hech qachon kod ichiga yozilmaydi, faqat.envfaylida saqlanadi. - Loyihani feature-based apps uslubida (
apps/news,apps/comments,apps/accounts,apps/common) tuzish kodning o'qilishi va kengayishini osonlashtiradi. settings/base.pyfaylidaINSTALLED_APPSro'yxatiga'rest_framework'qo'shilishi orqali Django REST Framework imkoniyatlari faollashadi.
Qo'shimcha ma'lumot
1. Nega pip install buyrug'ini virtual muhitsiz ishlatmaslik kerak?
Tasavvur qiling, siz kompyuteringizda ikkita loyiha ustida ishlayapsiz:
- Birinchi loyiha — eski tizim bo'lib,
Django 3.2versiyasida yozilgan. - Ikkinchi loyiha — eng yangi loyiha bo'lib,
Django 5.1versiyasini talab qiladi.
Agar siz virtual muhit yaratmasdan, global terminalda pip install django qilsangiz, yangi o'rnatilgan Django eski loyihangizning barcha fayllarini buzib qo'yadi! Virtual muhit esa har bir loyiha uchun alohida "xona" ajratadi: 1-loyiha o'zining eski kutubxonalari bilan, 2-loyiha esa o'zining yangi kutubxonalari bilan tinch va mustaqil ishlaydi.
2. .env fayli xavfsizlik madaniyati
Dasturlash tarixida minglab dasturchilar xatosi sababli kompaniyalar millionlab dollar zarar ko'rgan: dasturchi tasodifan maxfiy ma'lumotlar bazasi paroli yoki karta to'lov kaliti yozilgan faylni GitHub-ga git push qilib yuboradi. Maxsus xakerlik botlari GitHub-ni har soniyada tekshirib turadi va parollarni 1 daqiqa ichida o'g'irlab oladi.
Shuning uchun oltin qoida:
- Loyiha ildizida
.gitignorefayliga.envyoziladi! - Git omboriga faqat
.env.examplenamunasi (soxta kalitlar bilan) yuklanadi. - Haqiqiy maxfiy kalitlar faqat serverning o'zidagi
.envfaylida qoladi.
3. Relyatsion bog'lanishlar: PROTECT, CASCADE va SET_NULL
Django ORM-da ForeignKey o'chirish harakatlari juda muhim:
on_delete=models.CASCADE— Ota obyekt o'chsa, unga bog'langan barcha bola obyektlar ham avtomatik o'chadi. Masalan, Post o'chsa, uning ostidagi barcha Comment'lar o'chadi (bu to'g'ri).on_delete=models.PROTECT— Agar ota obyektga bog'langan kamida bitta bola obyekt bo'lsa, ota obyektni o'chirishga ruxsat bermaydi (ProtectedErrorchiqaradi). Masalan, "Iqtisodiyot" kategoriyasida 100 ta post bo'lsa, adashib bu kategoriyani o'chirib yuborishning oldini oladi.on_delete=models.SET_NULL— Ota obyekt o'chsa, bola obyektdagi havola bo'sh (NULL) holatga o'tadi. Masalan, maqola muallifi profili o'chsa, maqola saytda qoladi, muallifi esa "Noma'lum" bo'lib ko'rinadi.
4. Clean Architecture va sozlamalar bo'linishi
Biz settings.py faylini bitta qilib qoldirmasdan, settings/ papkasi ichida 3 ga ajratdik:
base.py— Barcha muhitlar uchun bir xil bo'lgan sozlamalar (applar, middleware, tillar, vaqt zonasi).local.py— Sizning noutbukingiz uchun (bu yerdaDEBUG = True, oddiy SQLite ishlatiladi).prod.py— Real ishlab chiqarish serveri uchun (bu yerdaDEBUG = False, kuchli PostgreSQL, maxsus xavfsizlik filtrlari ishlatiladi).
Atamalar lug'ati
| Atama | Ma'nosi |
|---|---|
| ERD (Entity Relationship Diagram) | Ma'lumotlar bazasi jadvallari, ularning maydonlari va o'zaro bog'lanishlarini ko'rsatuvchi arxitektura sxemasi. |
| Virtual Environment (venv) | Python loyihasi uchun kutubxonalar va bog'liqliklarni izolyatsiya qiluvchi alohida muhit. |
| requirements.txt | Loyihaga o'rnatilgan barcha Python paketlari va ularning versiyalari qayd etilgan matnli fayl. |
| pip freeze | O'rnatilgan paketlarni aniq versiyalari bilan terminalga chiqaruvchi Python buyrug'i. |
| .env | Tizim konfiguratsiyasi va maxfiy kalitlarini saqlash uchun mo'ljallangan muhit fayli. |
| Clean Architecture | Dastur kodini o'qilishi oson, sinovdan o'tuvchi va o'zaro bog'liqligi minimal qatlamlarga ajratuvchi loyihalash tamoyili. |
| One-to-Many (1-N) | Bir obyektga ko'plab boshqa obyektlar bog'lanishi mumkin bo'lgan munosabat (masalan: bitta Category → ko'p Post). |
| Many-to-Many (N-N) | Ikkala tomondan ham bir nechta bog'lanish mavjud bo'lgan munosabat (masalan: bitta Post → ko'p Tag, bitta Tag → ko'p Post). |
| Slug | URL manzillarda ishlatish uchun qulay, faqat lotin harflari, sonlar va chiziqchalardan iborat matnli identifikator. |
| ForeignKey | Boshqa jadvaldagi qatorga ishora qiluvchi maydon (relyatsion kalit). |
Bilasizmi?
- Django freymvorki 2003-yilda AQShning Kanzas shtatidagi "Lawrence Journal-World" yangiliklar gazetasi dasturchilari tomonidan yaratilgan. Shuning uchun ham Django arxitekturasi yangiliklar saytlarini tez va samarali yaratish uchun mukammal moslashgan!
pip freeze > requirements.txtbuyrug'i yordamida olingan fayl butun dunyo bo'ylab dasturiy ta'minotni tarqatish va Docker konteynerlariga joylashning universal standarti hisoblanadi.- PostgreSQL — dunyodagi eng ilg'or ochiq kodli relyatsion ma'lumotlar bazasi bo'lib, u yirik korporatsiyalarda soniyasiga o'n minglab murakkab tranzaksiyalarni xatosiz bajarishga qodir.
Topshiriqlar
1. Virtual muhit buyruqlari ketma-ketligi oson
Kompyuterda blog_api nomli yangi loyiha papkasini ochish, unda virtual muhit yaratish va uni faollashtirish bo'yicha terminal buyruqlarini tartib bilan yozing (Windows va Linux/Mac uchun). Kutiladigan natija: Ikkala operatsion tizim uchun to'liq buyruqlar ketma-ketligi.
2. Kutubxona o'rnatish va tekshirish oson
Virtual muhit ichiga django va djangorestframework paketlarini o'rnatish hamda requirements.txt faylini yaratish uchun qaysi 2 ta buyruq ishga tushiriladi? Kutiladigan natija: Kutubxonalarni o'rnatish va eksport qilish buyruqlari.
3. .env xavfsizligini ta'minlash oson
Dasturchi o'z loyihasini GitHub-ga yuklashdan oldin .env fayli tarmoqqa chiqib ketmasligi uchun nima qilishi kerak? Ushbu qoidani aniq fayl nomi bilan ko'rsating. Kutiladigan natija: .gitignore fayliga kiritilishi kerak bo'lgan yozuv va uning sababi.
4. Relyatsiyalarni tahlil qilish oson
NewsPortal loyihasidagi quyidagi juftliklar orasida qanday bog'lanish turi (1-to-1, 1-to-Many yoki Many-to-Many) mavjudligini aniqlang:
CategoryvaPostPostvaTagPostvaCommentKutiladigan natija: Har bir juftlik uchun to'g'ri relyatsiya turi.
5. .env.example shablonini tuzish o'rta
NewsPortal loyihasida PostgreSQL bazasiga ulanish uchun .env.example shablonini yarating. Unda SECRET_KEY, DEBUG, DB_NAME, DB_USER, DB_PASSWORD, DB_HOST, DB_PORT maydonlari bo'lsin. Kutiladigan natija: Xavfsiz, namunaviy konfiguratsiya matni.
6. on_delete harakatlarini taqqoslash o'rta
Tasavvur qiling, "Texnologiya" nomli kategoriya ichida 15 ta yangilik maqolasi bor.
- Agar
on_delete=models.CASCADEbo'lsa va admin ushbu kategoriyani o'chirib yuborsa, 15 ta maqolaga nima bo'ladi? - Agar
on_delete=models.PROTECTbo'lsa va admin ushbu kategoriyani o'chirishga harakat qilsa, Django qanday javob qaytaradi? - Nima uchun yirik yangiliklar saytida
models.PROTECTtanlanishi maqsadga muvofiq? Kutiladigan natija: Har ikki holat tahlili va sababi.
7. Daraxtsimon (Threaded) izohlar mantiqi o'rta
Ijtimoiy tarmoqlar va yangiliklar saytlarida bir foydalanuvchining izohiga boshqa foydalanuvchi javob yoza oladi. Ushbu mantiqni bitta Comment jadvali orqali amalga oshirish uchun modelda qanday maydon qo'shilishi kerak? Nega ushbu maydonda parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True) deb yoziladi? Kutiladigan natija: self bog'lanishining vazifasi va uning qanday ishlashi bo'yicha tushuntirish.
8. Loyiha arxitekturasidagi xatoni topish o'rta
Boshlovchi dasturchi o'z loyihasining settings.py fayliga quyidagi kodni yozdi:
python
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'rest_framework',
'news',
]Biroq u ilovalarni src/apps/news papkasida yaratgan edi. Nima uchun python manage.py runserver qilganda ModuleNotFoundError: No module named 'news' xatosi yuz beradi? Xatoni qanday to'g'rilash kerak? Kutiladigan natija: Xato sababi va to'g'ri apps.news yozuvi.
9. Mini-loyiha: Elektron kutubxona ER diagrammasi qiyin
Elektron kutubxona tizimi uchun relyatsion ma'lumotlar bazasi sxemasini (ERD) loyihalashtiring:
- Jadvallar:
Author,Publisher,Book,Review. - Har bir jadval uchun kamida 4 tadan maydon yozing (maydon nomi va toifasi: masalan
title: CharField). - Jadvallar orasidagi bog'lanishlarni (1-N, N-N) va
on_deleteturlarini aniq ko'rsating. Kutiladigan natija: To'liq ma'lumotlar bazasi arxitekturasi loyihasi.
10. PostgreSQL va SQLite farqlari tadqiqoti qiyin
Dastlabki ishlab chiqishda (local development) ko'pincha SQLite ishlatiladi, ammo ishlab chiqarishda (production) PostgreSQL talab qilinadi.
- SQLite ning qanday cheklovlari bor (bir vaqtning o'zida yozish, ma'lumotlar hajmi)?
- PostgreSQL ning qanday kuchli xususiyatlari yirik tizimlar uchun muhim (JSONB maydonlar, to'liq matnli qidiruv, yuqori konkurentlik)?
- Qanday qilib Django ORM orqali bitta kod bilan ikkala bazada ham bir xil ishlash mumkin? Kutiladigan natija: Ikki ma'lumotlar bazasini chuqur texnik tahlil qiluvchi hisobot.
11. Slug yaratish va URL optimizatsiyasi qiyin
Maqola sarlavhasi: "Sun'iy intellekt va O'zbekiston yoshlari: 2026-yil istiqbollari!".
- Ushbu sarlavha uchun ideal
slugqanday ko'rinishda bo'lishi kerak? - Nima sababdan URL larda
id(masalan/posts/145/) o'rnigaslug(masalan/posts/suniy-intellekt-istiqbollari/) ishlatish qidiruv tizimlari (SEO) va foydalanuvchilar uchun foydali? - Agar ikkita muallif aynan bir xil sarlavhali maqola yozsa,
unique=Trueqoidasi qanday muammo keltirib chiqarishi mumkin va uni qanday yechish mumkin? Kutiladigan natija: Slug mexanizmi, SEO ahamiyati va unikallik muammosining texnik yechimi.
12. Bonus tadqiqot: Django ORM migrations mexanizmi bonus
python manage.py makemigrations va python manage.py migrate buyruqlari qanday ishlaydi?
makemigrationsbuyrug'i qanday fayl hosil qiladi va bu fayl ichida nima saqlanadi?migratebuyrug'i ma'lumotlar bazasida qaysi maxsus jadval (django_migrations) orqali qaysi migratsiyalar bajarilganini kuzatib boradi?- Agar migratsiya faylini qo'lda o'chirib yuborsak, qanday xavf yuzaga keladi? Kutiladigan natija: Django migratsiya mexanizmini to'liq ochib beruvchi mustaqil tadqiqot.
O'zingizni tekshiring
- Virtual muhit nima uchun kerak va u tizimni qanday himoya qiladi?
pip freeze > requirements.txtbuyrug'i jamoaviy dasturlashda qanday yordam beradi?- Maxfiy o'zgaruvchilarni
.envfaylida saqlashning asosiy sababi nima? models.PROTECTbilanmodels.CASCADEorasidagi asosiy farqni bitta misol bilan tushuntiring.- Django loyihasida ilovalarni alohida
apps/papkasiga ajratishning qanday ustunliklari bor? INSTALLED_APPSro'yxatida Django REST Framework qanday nom bilan qayd etiladi?
Uyga vazifa
- Konspektdagi terminal buyruqlarini kompyuteringizda ketma-ket bajarib,
newsportalloyihasini yarating. src/config/settings/base.pyfaylini konspektdagi namuna asosida shakllantiring vaINSTALLED_APPSga'rest_framework'qo'shing.- Loyiha ildizida
.envfaylini yarating va ungaSECRET_KEYkiriting. - Terminalda
python manage.py migratebuyrug'ini bering va barcha dastlabki jadvallar bazaga yozilganligini tekshiring.
