Kirish

FastFort nima, u FastAPI loyihasiga o‘rnatilganda nima beradi va u qanday cheklovlar ostida qurilgan.

Mavjud v0.1.0

FastFort — FastAPI uchun admin panel va autentifikatsiya freymvorki. U loyihaga Django’da bor-u, FastAPI’da yo‘q narsalarni beradi: model admini, sessiyalar va JWT’lar, rollar, audit jurnali — bularning barchasi bitta wheel paket sifatida o‘rnatiladi.

uv add "fastfort[sqlalchemy,postgres]"

Boshqa hech narsa kerak emas. Node.js yo‘q, build bosqichi yo‘q, CDN yo‘q, keyin o‘qib chiqishingiz kerak bo‘ladigan fayllarni yozadigan scaffolding vositasi ham yo‘q.

O‘rnatishdan so‘ng nimalarga ega bo‘lasiz

Modelni ro‘yxatdan o‘tkazing va /admin sahifasini oching:

from fastfort import admin

from app.models import Product


@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    list_display = ("id", "name", "category", "price", "stock", "is_active")
    list_filter = ("is_active", "category", "price")
    search_fields = ("sku", "name", "description")
    ordering = ("-created_at",)
    select_related = ("category",)

Natijada saralanadigan ustunlarga ega jadval, qidiruv maydoni, filtr paneli, sahifalangan navigatsiya, ommaviy amallar uchun qatorlarni tanlash hamda ishlaydigan yaratish, tahrirlash va o‘chirish sahifalari hosil bo‘ladi. Tashqi kalitlar qidiriladigan tanlagichlarga aylanadi — nishon jadval ochiladigan ro‘yxatdan kattaroq bo‘lib ketganda, avtomatik to‘ldirish endpointi ishga tushadi — ko‘pdan-ko‘pga maydonlar esa olib tashlanadigan chip’larga aylanadi.

Bu boshqaruv elementlarining har biri JavaScript o‘chirilgan holda ham ishlaydi. Saralash — havola, filtrlash — forma, brauzer tomonidagi skript esa ularni almashtirmasdan, joyida yaxshilaydi, xolos.

U qurilgan cheklovlar

Bular shunchaki afzal ko‘rilgan yondashuvlar emas. Har biri butun bir muammolar sinfini yopib qo‘ygan, va ulardan biri buzilsa, test to‘plami muvaffaqiyatsiz tugaydi.

Hech qayerda Node.js yo‘q

Admin panelning CSS, JavaScript, ikonka va shablon fayllari qo‘lda yozilgan bo‘lib, to‘g‘ridan-to‘g‘ri paketning o‘zidan uzatiladi. Loyiha bitta wheel paketni o‘rnatadi va ishlaydigan admin panelga ega bo‘ladi. FastFort deployida npm install yo‘q, Docker image’da node_modules yo‘q, va sizning ma’lumotlaringizni ko‘rsatadigan sahifa CDN’ga so‘rov yubormaydi.

Frontend uchun test orqali nazorat qilinadigan hajm byudjeti bor — hozircha bu siqilgan (gzip) holda 24 KB CSS va 29 KB skript. Uni oshirishga ruxsat berilgan va bu allaqachon uch marta sodir bo‘lgan; har bir oshirishda unga sabab bo‘lgan funksiya nomi ko‘rsatiladi.

Admin panel sizning ORM’ingizni hech qachon ko‘rmaydi

fastfort/orm/ dan yuqorida hech narsa SQLAlchemy yoki Tortoise’ni import qila olmaydi, va bu qoida buzilsa, test build’ni muvaffaqiyatsiz qiladi. Introspeksiya modelni ModelSpecga — oddiy, o‘zgarmas, JSON’ga serializatsiya qilinadigan ma’lumotga — aylantiradi, va undan yuqoridagi har bir qatlam aynan shu bilan ishlaydi.

Natija aniq bo‘ldi: ikkinchi ORM adapteri admin panelning bironta qatorini o‘zgartirmasdan qo‘shildi, mos kelishni tekshiruvchi test to‘plami esa ikkala backend’ga bir xil model shakllari ustida bir xil savollarni beradi — shunday qilib «ikkinchisi ham xuddi shunday ishlaydi» degan da’vo shunchaki so‘z emas, balki testga aylanadi.

Konfiguratsiya xatolari ishga tushishda yuzaga chiqadi

list_displaydagi xatolik kimdir sahifani birinchi marta ochganda 500 xatosiga olib kelmaydi. Bu — barcha muammolarni birdaniga nomlab beruvchi ishga tushish xatosi:

ConfigurationError: ProductAdmin is misconfigured:
  - list_display names 'pirce', which shop.product has no
  - list_filter names 'description'; free-text and multi-valued fields
    cannot be offered as a filter
  - ordering names 'rank', which is not sortable
Hint: Fields available on shop.product: category, cost, created_at, ...

Ommaviy o‘zlashtirishning faqat bitta nazorat nuqtasi bor

FieldSpec.editable — yagona haqiqat manbai. Spesifikatsiyasida editable=False deb ko‘rsatilgan maydon uchun yuborilgan qiymat, u qaysi forma yoki endpoint orqali kelishidan qat’i nazar, e’tiborga olinmaydi. Unga zid kelishi mumkin bo‘lgan ikkinchi bayroq atayin mavjud emas.

Adapterlar hech qachon commit qilmaydi

Ular flush qiladi. UnitOfWork kontekst menejeri muvaffaqiyatli yakunlanganda commit qiladi va istisno yuz berganda orqaga qaytaradi (rollback), shu sababli yarim muvaffaqiyatsiz so‘rovdan hech narsa qolmaydi — hatto qirqinchi qatorida muvaffaqiyatsiz tugagan ommaviy amal ham.

U nima emas

  • CMS emas. U jadvallaringizdagi qatorlarni tahrirlaydi. Uning o‘z kontent modeli, sahifalar daraxti yoki nashr qilish workflow’i yo‘q.
  • REST freymvork emas. Bu — admin panel. API’ingiz sizniki bo‘lib qoladi; FastFort bitta URL prefiksi ostida o‘rnatiladi va undan chetga chiqmaydi.
  • Hali barqaror emas. 0.3.0 — 1.0’gacha bo‘lgan versiya, va ochiq API hali qat’iylashtirilmagan. Kichik (minor) relizda orqaga mos kelmaydigan o‘zgarishlar bo‘lishi mumkin — ularning har biri changelog’da Breaking sarlavhasi ostida keltiriladi. Versiyani qat’iy belgilab qo‘ying (pin).

Keyin qayerga borish kerak

  • Tezkor boshlash — bo‘sh direktoriyadan tizimga kirilgan admin panelgacha bo‘lgan yo‘l.
  • Model admini — barcha opsiyalar va ularning har biri ekranda nimani o‘zgartirishi.
  • Ekranma-ekran — har bir admin sahifasi uni hosil qiluvchi kod bilan yonma-yon.