Texnik topshiriq, MB dizayni va dastlabki sozlamalar: E-Library API
10-sinfAdvanced Python Back-end4-hafta · 12-darsvenv, Uvicorn, kutubxonalar.
E-Library API: maqsad, rollar, MVP.
Jadvallar, PK/FK va bog'lanishlar.
Config, DB session, main.py, Alembic.
Poydevor
Zamonaviy Python backend freymvorki, REST API uchun.
async / await asosida ishlaydi.
/docs sahifasida API hujjati avtomatik chiqadi.
ASGI konsepsiyasi
Mijoz - Uvicorn - FastAPI. Bloklarga bosing.
Hamma loyiha bitta kutubxonalar to'plamidan foydalanadi.
Versiyalar ziddiyati (dependency conflicts).
Har loyihaga alohida izolyatsiyalangan papka.
Loyiha uchun kerakli kutubxonalargina.
$ 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
Avval chizma, keyin kod
Foydalanuvchilar elektron kitoblarni joylaydi, ko'radi va boshqaradi (CRUD).
Guest, User, Admin (keyingi iteratsiya).
Auth, Category CRUD, Book CRUD, fayl yuklash/yuklab olish.
Clean Architecture, PEP8, .env, Alembic, Async SQLAlchemy.
Autentifikatsiyasiz: faqat is_published=True kitoblarni ko'radi.
Kitob qo'shadi, o'zinikini tahrirlaydi/o'chiradi, fayl yuklaydi.
Hammasini boshqaradi (keyingi iteratsiya, modelda is_admin).
Yengil Clean Architecture
router - service - model - baza. schemas (Pydantic) kirish/chiqish shaklini belgilaydi.
Modellar, yo'llar va sozlamalar bitta faylda.
O'qish va test qilish qiyin.
Har mantiqiy qism alohida papka va fayl.
Kengaytirish va test qilish oson.
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.
Kodgacha qog'ozda chizamiz
Foydalanuvchi va pasport ma'lumoti.
Bitta user ko'p post yozadi. Eng ko'p ishlatiladi.
Talabalar va fanlar. Bog'lovchi jadval orqali.
Ikkita 1:N bog'lanish
users (1) - (N) books, categories (1) - (N) books. Bloklarga bosing.
| Maydon | Turi | Izoh |
|---|---|---|
title | varchar(200) | NOT NULL |
file_path | text | yuklangach to'ladi |
is_published | bool | default false |
owner_id | UUID FK | users.id (CASCADE) |
category_id | UUID FK | categories.id (RESTRICT) |
Indekslar keyinroq: books(title), books(owner_id), books(category_id).
Config, baza va ishga tushirish
# .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?
.env ni GitHub ga yuklamang; .env.example dan nusxa oling.Asinxron ulanish
Engine = yo'l, session = yo'ldagi mashina. Bloklarga bosing.
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()
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 init alembic: papka va sozlama fayllari yaratiladi.
target_metadata = Base.metadata, URL settings dan olinadi.
alembic revision --autogenerate -m "..."
alembic upgrade head: o'zgarishlar bazaga kiritiladi.
Alembic: MB versiyalarini boshqarish. alembic.ini ga URL yozilmaydi.
$ uvicorn app.main:app --reload
INFO: Uvicorn running on http://127.0.0.1:8000
Swagger: /docs
One-to-Many bog'lanishda Foreign Key qaysi jadvalda bo'ladi?
pip install qilish; .env ni yaratmaslik.app/models/__init__.py da import qilmaslik: --autogenerate uni ko'rmaydi.config.py, database.py, main.py ni yozib, uvicorn bilan /health ni tekshiring.
FastAPI skeleton tayyor: TT, arxitektura, MB dizayni va sozlamalar.
Uyga vazifa: uyga-vazifa.md. Keyingi hafta: FastAPI da foydalanuvchilarni boshqarish.