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.