AXV

DRF Loyiha va MB Loyihalash

NewsPortal tizimi arxitekturasi, ER diagrammasi va Clean Architecture sozlamalari

10-sinfAdvanced Python Back-end1-hafta · 2-dars

Dars rejasi

MB Loyihalash (ERD)

NewsPortal ma'lumotlar modeli: Category, Tag, Post va Comment munosabatlari.

Virtual Muhit & Paketlar

Python venv, requirements.txt va Django REST Framework o'rnatish.

Clean Architecture

src/ va apps/ modulli strukturasi, .env konfiguratsiyasi va sozlamalar.

01

NewsPortal loyihasi

Mini-TT va foydalanuvchi rollari

Tizim foydalanuvchilari va rollar

Guest (Mehmon)

Ro'yxatdan o'tmasdan yangiliklar ro'yxatini va maqola matnini o'qish imkoniyati.

User (Foydalanuvchi)

Shaxsiy profilga ega bo'lish, maqolalarga izoh yozish va muhokamalarda qatnashish.

Admin / Staff

Maqolalarni yaratish, tahrirlash, o'chirish (CRUD) va izohlarni moderatsiya qilish.

Ma'lumotlar bazasi sxemasi (ERD)

Jadvallar va ularning relyatsion bog'lanishlari

Category id, name, slug created_at Post (Yangilik) id, title, slug, body status, cover_image category_id (PROTECT) tags (ManyToMany) published_at Tag id, name, slug created_at Comment (Izoh) id, post_id (CASCADE) parent_id (self) body, is_approved 1 → N N ↔ N 1 → N

Relyatsion xavfsizlik: PROTECT vs CASCADE

models.PROTECT

Kategoriya o'chirilganda postlar o'chib ketmasligi uchun o'chirishni taqiqlaydi.

Maqolalar ota kategoriyasiz qolib ketmaydi.

VS

models.CASCADE

Post o'chirilganda, unga tegishli barcha izohlar ham birga avtomatik o'chiriladi.

Baza keraksiz qoldiq ma'lumotlardan tozalanadi.

02

Virtual muhit va o'rnatish

Loyiha izolyatsiyasi va talab qilinadigan kutubxonalar

Nega virtual muhit (venv) shart?

Har bir loyihaning kutubxona va versiyalar to'qnashuvini oldini oladi

Global Tizim Python Django 3.2 (Eski loyiha) Kutubxonalar to'qnashuvi xavfi Operatsion tizimga bog'liq NewsPortal (venv) Django 5.1 · DRF 3.15 Izolyatsiyalangan mustaqil muhit Faqat ushbu loyiha uchun ishlaydi

Virtual muhitni ishga tushirish

Terminalda ketma-ket bajariladigan buyruqlar

Terminal / Bash
# 1. Virtual muhit yaratish
python3 -m venv venv

# 2. Faollashtirish (macOS / Linux)
source venv/bin/activate
# Windows uchun: venv\Scripts\activate

# 3. Asosiy paketlarni o'rnatish
pip install django djangorestframework python-dotenv psycopg2-binary

# 4. requirements.txt hosil qilish
pip freeze > requirements.txt
03

Clean Architecture

Yirik kompaniyalar andozasidagi modulli loyiha strukturasi

NewsPortal papkalar strukturasi

src/config/

Loyiha sozlamalari, URL marshrutlar va WSGI/ASGI fayllari jamlangan boshqaruv markazi.

src/apps/

Domenlar bo'yicha ajratilgan mustaqil ilovalar: news, comments, accounts, common.

.env & configs

Maxfiy kalitlar, baza parollari va muhit o'zgaruvchilari uchun maxsus qatlam.

Xavfsizlik: .env fayli qanday ishlaydi?

Maxfiy kalitlar koddan ajratiladi va Git-ga yuklanmaydi

.env fayli SECRET_KEY=s3cr3t... DEBUG=True .gitignore orqali yashiriladi load_dotenv() settings/base.py os.getenv("SECRET_KEY") os.getenv("DEBUG") Xavfsiz GitHub push!

settings/base.py sozlamasi

# src/config/settings/base.py
from pathlib import Path
import os
from dotenv import load_dotenv

BASE_DIR = Path(__file__).resolve().parent.parent.parent
load_dotenv(BASE_DIR.parent / ".env")

INSTALLED_APPS = [
    # Django standart ilovalari...
    "rest_framework",  # DRF kutubxonasi
    "apps.common",
    "apps.news",
    "apps.comments",
]

Django ORM va Migratsiyalar

  1. Model yaratiladi: Python klassi sifatida jadval maydonlari yoziladi (models.Model).
  2. makemigrations: Django modellardagi o'zgarishlarni tahlil qilib, migratsiya rejasini tuzadi.
  3. migrate: Ushbu reja asosida ma'lumotlar bazasida (SQLite / PostgreSQL) haqiqiy jadvallar ochiladi.

Loyihani ishga tushirish bosqichlari

1-qadam: Muhitni tayyorlash

Terminalda python3 -m venv venv va source venv/bin/activate orqali toza muhit ochiladi.

2-qadam: Paketlarni o'rnatish

pip install django djangorestframework python-dotenv buyruqlari bilan backend vositalari yuklanadi.

3-qadam: Loyiha va sozlamalar

django-admin startproject config src/ qilinib, settings/base.py ga DRF ulanadi.

Atamalarni tekshiramiz

ERD

Bosing va tekshiring

Entity-Relationship

Jadvallar va ular orasidagi bog'lanishlar (1-N, N-N) arxitektura chizmasi.

PROTECT

Bosing va tekshiring

Himoya qoidasi

Agar bog'langan postlar bo'lsa, kategoriyani o'chirishga ruxsat bermaydi.

.env

Bosing va tekshiring

Maxfiy muhit

Parollar va maxfiy kalitlarni koddan ajratib saqlovchi konfiguratsiya fayli.

Tezkor bilim tekshiruvi

Nima uchun Category va Post o'rtasida models.PROTECT qo'yish to'g'ri yondashuv hisoblanadi?

To'g'ri! models.PROTECT ma'lumotlar butunligini saqlaydi: ichida maqolalar bor kategoriyani tasodifan o'chirib yuborishning oldini oladi.

Dasturchilar ko'p yo'l qo'yadigan xatolar

Xato: Maxfiy SECRET_KEY yoki parollarni to'g'ridan-to'g'ri settings.py da qoldirish va GitHub-ga yuklash.
To'g'ri: .env faylidan foydalaning va .gitignore fayliga .env ni yozib qo'ying.

Amaliy topshiriq 15 daqiqa

Oson Kompyuteringizda newsportal papkasini oching va venv virtual muhitini yarating.
O'rta django va djangorestframework kutubxonalarini o'rnating, requirements.txt hosil qiling.
Qiyin .env faylini sozlang va python manage.py migrate orqali dastlabki migratsiyalarni bajaring.
AXV

Darsni yakunlaymiz

Keyingi darsda: Model, View va Serializerlar yozamiz hamda Routerlar orqali API endpointlarni ochamiz!

ERD loyihalash Virtual muhit (venv) Clean Architecture .env xavfsizligi