Odoo ning ʻz darsligi arxitekturani bir jumlada beradi: taqdimot, biznes mantiq va maʼlumotlar saqlash bir-biridan ajratilgan, yaʼni uch qatlamli arxitektura. Taqdimot qatlami HTML5, JavaScript va CSS dan iborat. Mantiq qatlami faqat Python da yoziladi. Maʼlumotlar qatlamida esa bitta imkoniyat bor: PostgreSQL. Bu uchlik 20.0 hujjatidan olingan; har qatlam quyida alohida kʻriladi.
Mantiq qatlami: Python, modullar va server
Server Python da yoziladi va Odoo 20 uchun minimal versiya 3.12, yuqori chegara 3.14: bu qiymatlar manba koddagi release.py faylida turadi. Odoo ni ishga tushirish uchun odoo-bin buyruq satri interfeysi ishlatiladi, u Community katalogining ildizida joylashgan. Qʻshimcha modullar yʻli (addons path) buyruq satri parametri yoki konfiguratsiya fayli orqali beriladi.
Odoo da hamma narsa modul atrofida quriladi. Darslik buni shunday ifodalaydi: Odoo da hamma narsa modullardan boshlanadi va modullar bilan tugaydi. Biznes obyekti (masalan, hisob-faktura) Python sinfi sifatida yoziladi, ORM uning maydonlarini jadval ustunlariga boʻlaydi. Foydalanuvchi kʻradigan asosiy modullar ilova (App) deb belgilanadi, kʻpchilik modul esa ilova emas.
Nashrlar (Community va Enterprise) ham shu qatlamda farqlanadi, lekin texnologiya boshqa emas. Darslik texnik nuqtai nazardan Enterprise imkoniyatlarini Community modullari ustiga ʻrnatiladigan yangi modullar deb ataydi. ʻrnatish hujjati buni aniqroq qiladi: Enterprise repozitoriysida server kodi tʻliq emas, faqat qʻshimcha modullar yiʻindisi bor, server esa Community dan ishga tushiriladi va Enterprise katalogi addons path ga qʻshiladi.
Bir jarayonda bir nechta baza ishlashi mumkin. Darslik bunday ogohlantiradi: bitta Odoo nusxasi bir Python jarayonida bir nechta bazani parallel ishlatadi, ularning har biriga turli modullar ʻrnatilgan bʻlishi mumkin, shu sababli ʻzgaruvchan global ʻzgaruvchilarni ishlatmaslik kerak. Bu maxsus modul yozadigan jamoa uchun amaliy qoida.
Server qaysi kutubxonalarga tayanishini requirements.txt fayli kʻrsatadi. Unda PostgreSQL bilan ulanish uchun psycopg2 turadi, kod ham aynan shu kutubxonadan bazaga ulanishni ochadi. HTTP qatlami Werkzeug ga tayanadi: tashqi API hujjatidagi xato namunasida werkzeug.exceptions.Unauthorized kʻrinadi. Changelogga kʻra 19.4 dan boshlab h11 asosidagi yangi HTTP server qʻshilgan, requirements.txt da h11 qatori ham bor.
Maʼlumotlar qatlami: faqat PostgreSQL
Hujjat aniq yozadi: maʼlumotlar qatlami faqat PostgreSQL ni qʻllab-quvvatlaydi. ʻrnatish sahifasi ham shuni takrorlaydi: Odoo maʼlumotlar bazasini boshqarish tizimi sifatida PostgreSQL dan foydalanadi, qʻllab-quvvatlanadigan versiyalar 16.0 va undan yuqori. Odoo postgres foydalanuvchisi bilan ulanishni taqiqlaydi, shuning uchun alohida baza foydalanuvchisi yaratiladi.
Bu boʻliqlik ORM sozlamalarida ham kʻrinadi. Char maydoni SQL da VARCHAR bʻladi. Kompaniyaga boʻliq maydon qiymatlari jsonb luʻati sifatida saqlanadi, kalit kompaniya identifikatori. Indeks turlari rʻyxatida PostgreSQL ga xos GIN va trigramlar turadi. 16.0 dan boshlab tarjima qilinadigan maydonlar ham JSONB qiymat sifatida yoziladi. Demak Odoo baza serverini almashtirish mumkin bʻlgan abstraksiya emas, PostgreSQL imkoniyatlari ustiga qurilgan tizim.
Faqat PostgreSQL bʻlishi rahbar uchun ikki oqibat beradi. Birinchisi, serverga qʻyiladigan talablar aniq: baza serveri 16 yoki yangiroq. Ikkinchisi, maʼlumotlarga SQL orqali kirish ochiq, lekin hujjat ogohlantiradi: xom SQL ORM va Odoo xavfsizlik qoidalarini chetlab ʻtadi. Shuning uchun bazaga tʻʻridan-tʻʻri yozish emas, ʻqish ham tizim ichidagi huquqlarni hisobga olmaydi.
Brauzer qatlami: web client va OWL
Odoo interfeysi brauzerda ishlaydigan bitta sahifali ilova (single-page application), uning manzili /web. Har harakatda sahifa butunlay yuklanmaydi: kerakli maʼlumot sʻraladi va ekran yangilanadi, URL esa holatga mos yuritiladi. Veb-sayt va kassa (POS) ham JavaScript framework ning bir qismidan foydalanadi.
Komponentlar tizimi OWL deb ataladi. Hujjatga kʻra u deklarativ komponent tizimi, Vue va React dan ilhomlangan, komponentlar QWeb shablonlari bilan yoziladi. Web client avval maxsus sinf va vidjet tizimida yozilgan, hozir esa oddiy JavaScript sinflari va OWL ga ʻtmoqda. Hujjatdagi kʻrsatma ochiq: yangi ishlanmalar iloji bʻlsa OWL da bajarilsin. Darslik 15.0 dan boshlab bu ʻtish boshlanganini va eski framework vaqt ʻtib eskirishini yozadi.
Kod tuzilishi ham aniq. Hamma JavaScript web/static/src katalogida turadi. Asosiy abstraksiyalar: registrlar (obʼektlarni kalit bʻyicha saqlaydi), xizmatlar (uzoq yashaydigan funksiyalar, masalan bildirishnoma yoki serverga sʻrov uchun), komponentlar va hook lar. Serverga sʻrov berishning tʻʻri yʻli rpc xizmati deb yozilgan.
Bir tafsilot eʼtiborga loyiq. Manba koddagi owl.js fayli 19.0 branchida 2.8.4 versiyasini kʻrsatadi, 20.0 branchida esa 3.0.0-alpha.49 ni, qurilgan sanasi 2026-09-08. OWL ning ʻz repozitoriysi README sida 3.0.0 alfa versiyasi ekani va API oldindan ogohlantirmasdan ʻzgarishi mumkinligi yozilgan. Shu bilan birga 20.0 hujjatidagi sahifa hamon 14 dan boshlab hamma Odoo versiyalari bir xil OWL versiyasidan foydalanadi, deb yozadi. Bu qarama-qarshilik: hujjat matni kodga yetib olmagan kʻrinadi.
Qatlamlar ʻzaro qanday gaplashadi
| Qatlam | Texnologiya | Vazifasi | Manba |
|---|---|---|---|
| Brauzer | JavaScript, OWL, QWeb shablonlari | Ekran, forma va rʻyxatlar, serverga sʻrov | |
| Server | Python, ORM, HTTP | Biznes qoidalar, huquqlarni tekshirish, sʻrovlarga javob | |
| Maʼlumotlar | PostgreSQL | Yozuvlarni saqlash va qidirish |
Brauzer serverga HTTP orqali murojaat qiladi. Server ORM yordamida PostgreSQL ga sʻrov yuboradi va natijani qaytaradi. Shu zanjirning tashqi kʻrinishi 19.0 dan beri hujjatlashtirilgan: Models API ning bir qismi /json/2 manzili orqali HTTP da ochiq. Sʻrov /json/2/<model>/<method> manziliga JSON kʻrinishida yuboriladi, sarlavhada API kaliti bʻlishi shart.
Hujjatdagi misolda res.partner modelining search_read metodi chaqiriladi, tanlov sharti va qaytariladigan maydonlar JSON da beriladi. Demak tashqi tizim ORM metodlarini aynan server ichidagi kabi chaqiradi. Bu oson, lekin xavfsizlikda ehtiyotkorlik talab qiladi: ommaviy metodni RPC orqali chaqirish mumkin, pastki chiziq bilan boshlanadigan metodlar esa tugma yoki tashqi API dan chaqirilmaydi.
Bu zanjirni bitta misolda kʻrish mumkin. Quyidagi sxema manbalardagi bʻlaklardan tahririyat tomonidan yiʻilgan, aniq bir ekran emas. Foydalanuvchi mijozlar rʻyxatini ochadi. Brauzerdagi OWL komponenti rpc xizmati orqali serverga sʻrov yuboradi. Server modelning qidirish metodini ishga tushiradi, ORM kirish huquqlarini tekshiradi va SQL sʻrovini quradi. Baza qatorlarni qaytaradi, server ularni JSON ga ʻgiradi, brauzer esa ekranni yangilaydi. Har bosqichda faqat bitta qatlam ʻz ishini bajaradi.
Bundan nima kelib chiqadi
Bu bʻlim tahririyat xulosasi, manbalardan chiqarilgan mantiq. Birinchi xulosa serverga tegishli: Odoo 20 uchun Python 3.12–3.14 va PostgreSQL 16+ talabi aniq. Ikkinchi xulosa jamoaga tegishli. Odoo ni moslashtirish ayni uch tilni qamrab oladi: server logikasi Python da, kʻrinishlar XML da, brauzer qismi JavaScript va OWL da. Moslashtiruvchi kim ekanini va qaysi qatlamga tegishini oldindan bilish foydali.
Uchinchi nuqta yangilanish xavfiga tegishli. Qatlamlar turli tezlikda ʻzgaradi. ORM changelogida har oraliq versiya uchun yozuv bor, OWL esa 20.0 da alfa bosqichdagi 3.0 ga ʻtgan. Maxsus JavaScript yozilgan bʻlsa, uni yangi OWL bilan tekshirish kerak bʻladi: 20.0 hujjati bu haqda alohida yozmaydi, shuning uchun savol ochiq. Amaliy tekshiruv: sinov bazasida yangilash va maxsus interfeys qismlarini ishga tushirib kʻrish.
Manbalar
Maqola quyidagi manbalarga tayanadi:
- Odoo S.A., Server framework 101, Chapter 1: Architecture Overview, Odoo 20.0 hujjatlari. https://www.odoo.com/documentation/20.0/developer/tutorials/server_framework_101/01_architecture.html (koʻrilgan: 15-oktabr, 2026)
- Odoo S.A., odoo/release.py, 20.0 branchi, GitHub. https://github.com/odoo/odoo/blob/20.0/odoo/release.py (koʻrilgan: 15-oktabr, 2026)
- Odoo S.A., Source install, Odoo 20.0 hujjatlari. https://www.odoo.com/documentation/20.0/administration/on_premise/source.html (koʻrilgan: 15-oktabr, 2026)
- Odoo S.A., Server framework 101, Chapter 3: Models and basic fields, Odoo 20.0 hujjatlari. https://www.odoo.com/documentation/20.0/developer/tutorials/server_framework_101/03_basicmodel.html (koʻrilgan: 15-oktabr, 2026)
- Odoo S.A., Framework Overview (JavaScript framework, web client), Odoo 20.0 hujjatlari. https://www.odoo.com/documentation/20.0/developer/reference/frontend/framework_overview.html (koʻrilgan: 15-oktabr, 2026)
- Odoo S.A., Owl components, Odoo 20.0 hujjatlari. https://www.odoo.com/documentation/20.0/developer/reference/frontend/owl_components.html (koʻrilgan: 15-oktabr, 2026)
- Odoo S.A., addons/web/static/lib/owl/owl.js, 19.0 va 20.0 branchlari (App.version), GitHub. https://github.com/odoo/odoo/blob/20.0/addons/web/static/lib/owl/owl.js (koʻrilgan: 15-oktabr, 2026)
- Odoo S.A., requirements.txt, 20.0 branchi, GitHub. https://github.com/odoo/odoo/blob/20.0/requirements.txt (koʻrilgan: 15-oktabr, 2026)
- Odoo S.A., External JSON-2 API, Odoo 20.0 hujjatlari (New in version 19.0). https://www.odoo.com/documentation/20.0/developer/reference/external_api.html (koʻrilgan: 15-oktabr, 2026)
- Odoo S.A., ORM changelog, Odoo 20.0 hujjatlari. https://www.odoo.com/documentation/20.0/developer/reference/backend/orm/changelog.html (koʻrilgan: 15-oktabr, 2026)
- Odoo S.A., ORM API (fields, SQL execution), Odoo 20.0 hujjatlari. https://www.odoo.com/documentation/20.0/developer/reference/backend/orm.html (koʻrilgan: 15-oktabr, 2026)
- Odoo S.A., odoo/owl repozitoriysi, README (Owl 3.0.0 Alpha eslatmasi), GitHub. https://github.com/odoo/owl (koʻrilgan: 15-oktabr, 2026)
- Odoo S.A., Security in Odoo (Security pitfalls: unsafe public methods), Odoo 20.0 hujjatlari. https://www.odoo.com/documentation/20.0/developer/reference/backend/security.html (koʻrilgan: 15-oktabr, 2026)