AXV

FastAPI loyiha yaratish

Texnik topshiriq, MB dizayni va dastlabki sozlamalar: E-Library API

10-sinfAdvanced Python Back-end4-hafta · 12-dars

Dars rejasi

FastAPI va muhit

venv, Uvicorn, kutubxonalar.

Texnik topshiriq

E-Library API: maqsad, rollar, MVP.

MB dizayni

Jadvallar, PK/FK va bog'lanishlar.

Dastlabki sozlamalar

Config, DB session, main.py, Alembic.

01

FastAPI va ishchi muhit

Poydevor

FastAPI nima?

Yuqori unumdor

Zamonaviy Python backend freymvorki, REST API uchun.

Asinxron

async / await asosida ishlaydi.

Swagger tayyor

/docs sahifasida API hujjati avtomatik chiqadi.

Asinxron FastAPI uchun WSGI emas, ASGI server kerak: Uvicorn.

So'rov FastAPI ga qanday keladi?

ASGI konsepsiyasi

Mijozbrauzer, ilovaHTTP so'rov UvicornASGI serverasync FastAPImain.pyroutes

Mijoz - Uvicorn - FastAPI. Bloklarga bosing.

Global yoki venv?

Global o'rnatish

Hamma loyiha bitta kutubxonalar to'plamidan foydalanadi.

Versiyalar ziddiyati (dependency conflicts).

VS

Virtual muhit (venv)

Har loyihaga alohida izolyatsiyalangan papka.

Loyiha uchun kerakli kutubxonalargina.

A loyihaga Django 3.0, B loyihaga Django 4.0 kerak bo'lishi mumkin: venv bu muammoni hal qiladi.

Muhitni tayyorlash

$ mkdir e_library && cd e_library
$ python -m venv .venv
$ source .venv/bin/activate
$ pip install fastapi "uvicorn[standard]" sqlalchemy asyncpg alembic pydantic-settings
$ pip install "python-jose[cryptography]" "passlib[bcrypt]" python-multipart

Windows da faollashtirish: .venv\Scripts\activate

02

Texnik topshiriq va arxitektura

Avval chizma, keyin kod

Mini TT: E-Library API (MVP)

Maqsad

Foydalanuvchilar elektron kitoblarni joylaydi, ko'radi va boshqaradi (CRUD).

Rollar

Guest, User, Admin (keyingi iteratsiya).

Funksiyalar

Auth, Category CRUD, Book CRUD, fayl yuklash/yuklab olish.

Talablar

Clean Architecture, PEP8, .env, Alembic, Async SQLAlchemy.

Rollar

Guest

Autentifikatsiyasiz: faqat is_published=True kitoblarni ko'radi.

User

Kitob qo'shadi, o'zinikini tahrirlaydi/o'chiradi, fayl yuklaydi.

Admin

Hammasini boshqaradi (keyingi iteratsiya, modelda is_admin).

Qatlamli arxitektura

Yengil Clean Architecture

routesHTTP qatlamirequest / response servicesbiznes mantiqruxsat, validatsiya modelsSQLAlchemy ORMjadvallar PostgreSQLma'lumotlarbaza

router - service - model - baza. schemas (Pydantic) kirish/chiqish shaklini belgilaydi.

Monolit yoki modulli?

Monolit main.py

Modellar, yo'llar va sozlamalar bitta faylda.

O'qish va test qilish qiyin.

VS

Paket tuzilmasi

Har mantiqiy qism alohida papka va fayl.

Kengaytirish va test qilish oson.

Enterprise darajadagi loyihalar uchun modulli arxitektura kerak.

Loyiha tuzilmasi (namuna)

e_library/
  .env
  alembic/
  app/
    main.py
    core/       config.py, database.py, security.py
    models/     base.py, user.py, book.py
    schemas/    user.py, token.py
    services/   auth_service.py
    api/        deps.py, routes/

O'quv namunasi: kerak bo'lganda kengaytiriladi.

03

MB dizayni

Kodgacha qog'ozda chizamiz

Bog'lanish turlari

One-to-One (1:1)

Foydalanuvchi va pasport ma'lumoti.

One-to-Many (1:N)

Bitta user ko'p post yozadi. Eng ko'p ishlatiladi.

Many-to-Many (M:N)

Talabalar va fanlar. Bog'lovchi jadval orqali.

PK qatorni aniqlaydi, FK boshqa jadvalga ishora qiladi.

E-Library ER diagrammasi

Ikkita 1:N bog'lanish

usersid UUID (PK)email UNIQUE booksowner_id (FK)category_id (FK) categoriesid UUID (PK)name UNIQUE

users (1) - (N) books, categories (1) - (N) books. Bloklarga bosing.

books jadvali: asosiy maydonlar

MaydonTuriIzoh
titlevarchar(200)NOT NULL
file_pathtextyuklangach to'ladi
is_publishedbooldefault false
owner_idUUID FKusers.id (CASCADE)
category_idUUID FKcategories.id (RESTRICT)

Indekslar keyinroq: books(title), books(owner_id), books(category_id).

04

Dastlabki sozlamalar

Config, baza va ishga tushirish

.env va config.py

# .env:  DB_HOST=localhost  DB_NAME=e_library ...
from pydantic_settings import BaseSettings, SettingsConfigDict

class Settings(BaseSettings):
    app_name: str = "E-Library API"
    db_host: str
    db_name: str
    db_user: str
    db_password: str
    model_config = SettingsConfigDict(env_file=".env")

settings = Settings()

Pastga bosing: nega .env?

Nega .env?

Maxfiy ma'lumot (MB paroli, API kalit) hech qachon kod ichida ochiq yozilmaydi.
BaseSettings qiymatni Python obyektiga o'giradi va tekshiradi. Unutilgan o'zgaruvchi bo'lsa xato beradi.
.env ni GitHub ga yuklamang; .env.example dan nusxa oling.

Engine va session

Asinxron ulanish

So'rovhar bir requestget_db() AsyncSessionvaqtinchalikmuloqot enginedoimiy kanalcreate_async_engine PostgreSQLe_libraryasyncpg

Engine = yo'l, session = yo'ldagi mashina. Bloklarga bosing.

main.py: boshlanishi

from fastapi import FastAPI
from app.core.config import settings

def create_app() -> FastAPI:
    app = FastAPI(title=settings.app_name)
    return app

app = create_app()

main.py: /health qo'shildi

from fastapi import FastAPI
from app.core.config import settings

def create_app() -> FastAPI:
    app = FastAPI(title=settings.app_name)

    @app.get("/health", tags=["system"])
    async def healthcheck() -> dict:
        return {"status": "ok"}

    return app

app = create_app()

Alembic: migratsiyalar

1. init

alembic init alembic: papka va sozlama fayllari yaratiladi.

2. env.py

target_metadata = Base.metadata, URL settings dan olinadi.

3. revision

alembic revision --autogenerate -m "..."

4. upgrade

alembic upgrade head: o'zgarishlar bazaga kiritiladi.

Alembic: MB versiyalarini boshqarish. alembic.ini ga URL yozilmaydi.

Ishga tushirish va tekshirish

$ uvicorn app.main:app --reload
INFO: Uvicorn running on http://127.0.0.1:8000
http://127.0.0.1:8000/health

{"status": "ok"}

Swagger: /docs

Mini-test

One-to-Many bog'lanishda Foreign Key qaysi jadvalda bo'ladi?

books.owner_id -> users.id: kitoblar ko'p, egasi bitta; kalit books jadvalida.

Odatiy xatolar

Venv ni faollashtirmasdan pip install qilish; .env ni yaratmaslik.
Modelni app/models/__init__.py da import qilmaslik: --autogenerate uni ko'rmaydi.
To'g'ri: avval TT va ER dizayn, keyin skeleton, so'ng migratsiya.

Amaliy topshiriq 20 daqiqa

OsonVenv yarating, faollashtiring va kutubxonalarni o'rnating.
O'rtaO'z loyihangiz uchun mini TT yozing va 2-3 jadvalli ER dizayn chizing.
Qiyinconfig.py, database.py, main.py ni yozib, uvicorn bilan /health ni tekshiring.
AXV

Xulosa

FastAPI skeleton tayyor: TT, arxitektura, MB dizayni va sozlamalar.

FastAPIUvicornvenvTT / MVPER diagrammaPostgreSQLAlembic.env

Uyga vazifa: uyga-vazifa.md. Keyingi hafta: FastAPI da foydalanuvchilarni boshqarish.