第10講、Odoo 18框架設計原理全解析

前言

Odoo是一套開源的企業資源規劃(ERP)系統,以其模塊化、可擴展性和全面的業務應用套件而聞名。Odoo 18作為其最新版本,在架構設計、前端技術和后端實現上都有顯著的創新和優化。本文將從前端的OWL組件化、模塊化,到后端的ORM封裝,全面解讀Odoo 18的框架設計原理及實現,并與Django、Flask等主流Python Web框架進行對比分析,幫助開發者深入理解Odoo 18的技術架構和設計思想。

一、Odoo 18整體架構設計

1.1 多層架構設計

Odoo 18采用經典的多層架構設計,將表現層、業務邏輯層和數據存儲層清晰分離。這種架構設計使得系統各部分職責明確,便于維護和擴展。

在這里插入圖片描述

圖1:Odoo 18框架多層架構設計

如上圖所示,Odoo 18的多層架構主要包括:

  • 表現層(Presentation Layer):負責用戶界面展示,主要由前端OWL框架和XML模板組成,實現了組件化的用戶界面
  • 業務邏輯層(Business Logic Layer):處理核心業務邏輯,由Python模型和控制器實現,通過模塊系統組織功能
  • 數據訪問層:通過ORM框架與數據庫交互,抽象數據操作,提供統一的數據訪問接口
  • 數據存儲層(Data Storage Layer):使用PostgreSQL數據庫存儲業務數據,確保數據持久化和一致性

前端和后端通過專門的通信機制進行數據交換,確保用戶操作能夠觸發相應的業務邏輯并反映在界面上。這種分層設計使得Odoo 18能夠靈活應對不同業務場景的需求,同時保持系統的可維護性和可擴展性。

1.2 模塊化設計理念

Odoo 18的核心設計理念是模塊化,整個系統由眾多功能模塊組成,每個模塊負責特定的業務功能。模塊化設計帶來以下優勢:

  • 按需安裝:企業可以根據實際需求選擇安裝所需模塊
  • 功能擴展:開發者可以通過創建新模塊擴展系統功能
  • 定制靈活:現有模塊可以通過繼承和覆蓋進行定制
  • 版本管理:模塊可以獨立升級和維護

Odoo 18的標準模塊包括銷售、采購、庫存、制造、會計、人力資源等,覆蓋企業運營的各個方面。此外,還有大量來自社區和第三方的擴展模塊,進一步豐富了Odoo的功能生態。

1.3 MVC架構實現

Odoo 18遵循MVC(Model-View-Controller)架構模式,但有其特定的實現方式:

  • 模型(Model):Python類定義,繼承自models.Model,負責業務數據結構和邏輯
  • 視圖(View):XML定義的用戶界面,包括表單視圖、列表視圖、看板視圖等
  • 控制器(Controller):Python類,繼承自http.Controller,處理HTTP請求和響應

這種MVC實現使得業務邏輯與界面展示分離,便于開發者理解和維護代碼。同時,Odoo 18對MVC模式進行了擴展,增加了工作流、報表等組件,使系統更加完整和強大。

1.4 服務架構

Odoo 18采用多進程服務架構,主要包括:

  • Web服務器:處理HTTP請求,提供Web界面
  • 工作進程:執行后臺任務和計劃任務
  • 聊天服務器:處理實時通信
  • 打印服務器:處理報表生成和打印

這種服務架構設計使得Odoo 18能夠高效處理并發請求,同時保持系統的穩定性和可靠性。

二、前端OWL組件化與模塊化實現原理

2.1 OWL框架概述

OWL(Odoo Web Library)是Odoo 18采用的前端組件框架,受Vue和React啟發,專為Odoo定制開發。OWL框架具有以下特點:

  • 聲明式組件系統:使用類似React的組件化思想
  • 虛擬DOM:高效更新DOM,提升渲染性能
  • 響應式狀態管理:通過useState鉤子管理組件狀態
  • 生命周期鉤子:提供組件各階段的生命周期方法
  • 事件處理系統:簡化用戶交互處理

OWL框架的引入使得Odoo 18前端開發更加現代化和高效,組件化開發提高了代碼復用性和可維護性。

2.2 OWL組件化實現

OWL組件由三部分組成:JavaScript邏輯、XML模板和可選的SCSS樣式。以下是一個典型OWL組件的實現示例:

JavaScript部分:

/** @odoo-module **/
import { registry } from "@web/core/registry";
import { Component, useState } from "@odoo/owl";// 定義Counter組件
export class Counter extends Component {static template = "my_module.Counter";  // 組件對應的模板setup() {this.state = useState({ value: 0 });  // 初始化狀態}// 增加計數方法increment() {this.state.value++;}
}// 注冊組件到系統托盤菜單
const systrayItem = {Component: Counter,
};
registry.category("systray").add("counter_systray", systrayItem, { sequence: 0 });

XML模板部分:

<?xml version="1.0" encoding="UTF-8"?>
<template xml:space="preserve"><t t-name="my_module.Counter"><div><buttonclass="btn"style="background-color: white; color: black; border: 1px solid #ccc;"t-on-click="increment">Counter: <t t-esc="state.value" /></button></div></t>
</template>

這種組件化實現方式具有以下優勢:

  • 關注點分離:邏輯與模板分離,便于維護
  • 狀態管理:通過useState鉤子實現響應式狀態
  • 事件綁定:使用t-on-*指令簡化事件處理
  • 模板渲染:使用t-esc等指令處理數據綁定

2.3 OWL核心組件與鉤子

Odoo 18的OWL框架提供了豐富的內置組件和鉤子函數,包括:

核心組件:
  • ActionSwiper:通過水平滑動觸發動作
  • CheckBox:復選框組件
  • ColorList:顏色選擇組件
  • Dropdown:下拉菜單組件
  • Dialog:對話框組件
  • Pager:分頁組件
核心鉤子:
  • useState:管理組件狀態
  • useRef:引用DOM元素
  • useEffect:處理副作用
  • useEnv:訪問環境變量
  • useService:使用服務

這些組件和鉤子大大簡化了前端開發工作,提高了開發效率。

2.4 前端模塊化機制

Odoo 18前端采用模塊化設計,主要通過以下機制實現:

  • 資產管道:管理JavaScript、CSS和XML資源
  • 模塊注冊表:通過registry系統注冊和管理組件
  • 依賴管理:使用@odoo-module注解和import語句管理依賴
  • 懶加載:按需加載模塊,提高性能

前端模塊化設計使得Odoo 18能夠高效管理大量前端資源,同時保持良好的性能和用戶體驗。

三、后端ORM封裝機制與模塊化思想

3.1 ORM架構設計

Odoo 18的ORM(對象關系映射)是其后端架構的核心,提供了對數據庫操作的高級抽象。ORM架構主要包括:

  • 模型定義:通過Python類定義數據模型
  • 字段系統:提供豐富的字段類型
  • CRUD操作:封裝創建、讀取、更新、刪除操作
  • 查詢構建器:構建復雜查詢
  • 關系映射:處理模型間關系
  • 事務管理:確保數據一致性

Odoo 18的ORM設計使得開發者無需直接編寫SQL語句,通過Python API即可完成復雜的數據庫操作。

3.2 模型定義與屬性

Odoo 18模型通過Python類定義,繼承自models.Model。模型類通過特定屬性配置其行為:

from odoo import models, fields, apiclass CustomPartner(models.Model):_name = 'custom.partner'  # 模型技術名稱_description = '自定義合作伙伴'  # 模型描述_inherit = 'res.partner'  # 繼承現有模型_order = 'name asc'  # 默認排序_log_access = True  # 記錄訪問日志_table = 'custom_partner'  # 數據庫表名# 字段定義name = fields.Char(string='名稱', required=True)active = fields.Boolean(default=True)partner_type = fields.Selection([('customer', '客戶'),('supplier', '供應商')], string='合作伙伴類型')

Odoo 18模型支持多種屬性,用于控制模型行為:

  • _auto:控制是否自動創建數據庫表
  • _log_access:控制是否記錄訪問日志
  • _table:指定數據庫表名
  • _sequence:定義用于生成唯一ID的SQL序列
  • _sql_constraints:定義SQL約束
  • _register:控制模型是否在注冊表中可見
  • _abstract:標記為抽象模型
  • _transient:標記為臨時模型
  • _name:定義模型技術名稱
  • _inherit:指定繼承的模型
  • _description:提供人類可讀的模型描述
  • _inherits:實現委托繼承
  • _rec_name:指定用于記錄標簽的字段
  • _order:指定默認排序
  • _parent_name:指定層次結構中的父字段
  • _parent_store:計算層次結構的parent_path字段
  • _date_name:定義日歷視圖中使用的日期字段
  • _fold_name:指定看板視圖中用于折疊分組的字段

這些屬性使得Odoo 18模型高度可配置,能夠適應各種業務需求。

3.3 字段系統與關系映射

Odoo 18提供了豐富的字段類型,用于定義模型的數據結構:

基本字段類型:
  • Char:字符串字段
  • Text:文本字段
  • Integer:整數字段
  • Float:浮點數字段
  • Boolean:布爾字段
  • Date:日期字段
  • Datetime:日期時間字段
  • Binary:二進制數據字段
  • Selection:選擇字段
  • Html:HTML內容字段
關系字段類型:
  • Many2one:多對一關系
  • One2many:一對多關系
  • Many2many:多對多關系
  • Reference:動態引用關系

字段定義支持多種參數,用于控制字段行為:

partner_id = fields.Many2one('res.partner',  # 關聯模型string='合作伙伴',  # 字段標簽required=True,  # 必填ondelete='cascade',  # 刪除行為index=True,  # 創建索引domain=[('is_company', '=', True)],  # 域過濾context={'default_is_company': True},  # 上下文help='選擇相關的合作伙伴'  # 幫助提示
)

關系字段使得Odoo 18能夠建立復雜的數據關系,實現業務實體間的關聯。

3.4 ORM方法與API

Odoo 18 ORM提供了豐富的方法和API,用于操作數據:

記錄集操作:
  • create():創建記錄
  • write():更新記錄
  • unlink():刪除記錄
  • read():讀取記錄
  • search():搜索記錄
  • browse():瀏覽記錄
環境與上下文:
  • env:環境對象,提供對模型、用戶、上下文的訪問
  • with_context():創建帶有修改上下文的環境
  • with_user():創建帶有不同用戶的環境
  • sudo():以超級用戶權限執行操作
計算字段與依賴:
  • @api.depends:定義計算字段依賴
  • @api.onchange:定義字段變更行為
  • @api.constrains:定義字段約束

示例代碼:

from odoo import models, fields, api
from odoo.exceptions import ValidationErrorclass SaleOrder(models.Model):_name = 'sale.order'_description = '銷售訂單'order_line_ids = fields.One2many('sale.order.line', 'order_id', string='訂單行')amount_total = fields.Float(string='總金額', compute='_compute_amount', store=True)state = fields.Selection([('draft', '草稿'),('confirmed', '已確認'),('done', '已完成')], string='狀態', default='draft')@api.depends('order_line_ids.price_subtotal')def _compute_amount(self):for order in self:order.amount_total = sum(line.price_subtotal for line in order.order_line_ids)@api.constrains('amount_total')def _check_amount_total(self):for order in self:if order.amount_total <= 0:raise ValidationError('總金額必須大于零')@api.onchange('partner_id')def _onchange_partner_id(self):if self.partner_id:self.pricelist_id = self.partner_id.property_product_pricelistdef confirm_order(self):self.write({'state': 'confirmed'})return True

這些API和方法使得Odoo 18開發者能夠高效實現復雜的業務邏輯。

3.5 后端模塊化實現

Odoo 18后端模塊化主要通過以下機制實現:

  • 模塊目錄結構:標準化的目錄結構組織代碼
  • 模塊清單:通過__manifest__.py定義模塊元數據和依賴
  • 數據文件:使用XML或CSV文件定義初始數據
  • 安全配置:通過安全文件定義訪問權限
  • 視圖定義:使用XML定義用戶界面
  • 控制器:處理HTTP請求和響應

典型的Odoo 18模塊目錄結構:

my_module/
├── __init__.py
├── __manifest__.py
├── controllers/
│   ├── __init__.py
│   └── main.py
├── models/
│   ├── __init__.py
│   ├── model1.py
│   └── model2.py
├── views/
│   ├── templates.xml
│   └── views.xml
├── security/
│   ├── ir.model.access.csv
│   └── security.xml
├── data/
│   └── initial_data.xml
├── static/
│   ├── src/
│   │   ├── js/
│   │   ├── xml/
│   │   └── scss/
│   └── description/
└── wizard/├── __init__.py└── wizard_model.py

模塊清單示例:

{'name': '自定義模塊','version': '1.0','category': 'Sales','summary': '自定義銷售功能','description': """這個模塊擴展了銷售功能,添加了自定義字段和報表。""",'author': '開發者','website': 'https://www.example.com','depends': ['sale', 'stock'],'data': ['security/security.xml','security/ir.model.access.csv','views/views.xml','views/templates.xml','data/initial_data.xml',],'qweb': ['static/src/xml/custom_widget.xml',],'assets': {'web.assets_backend': ['my_module/static/src/js/custom_widget.js','my_module/static/src/scss/custom_style.scss',],},'installable': True,'application': False,'auto_install': False,'license': 'LGPL-3',
}

這種模塊化設計使得Odoo 18能夠靈活擴展和定制,同時保持系統的一致性和可維護性。

四、Odoo 18與Django、Flask的對比分析

4.1 設計哲學與整體架構對比

Odoo 18
  • 設計哲學:模塊化、全功能的企業資源規劃(ERP)框架
  • 架構模式:基于MVC架構
  • 核心特點:高度模塊化,業務功能導向
  • 應用場景:企業資源規劃、客戶關系管理、集成業務流程
Django
  • 設計哲學:快速開發,遵循"不要重復自己"(DRY)原則
  • 架構模式:MTV(Model-Template-View)模式
  • 核心特點:"電池已包含"的理念,提供大量內置功能
  • 應用場景:內容管理系統、社交網絡、電子商務平臺
Flask
  • 設計哲學:極簡主義和靈活性
  • 架構模式:微框架,不強制特定架構模式
  • 核心特點:輕量級,僅提供核心功能
  • 應用場景:API服務、微服務、簡單Web應用

Odoo 18與Django、Flask的主要區別在于其業務導向的設計理念。Odoo 18是一個完整的企業應用平臺,而不僅僅是一個Web框架。它提供了大量預構建的業務功能模塊,而Django和Flask更專注于提供Web開發的基礎設施。

4.2 前端技術對比

Odoo 18
  • 前端框架:OWL (Odoo Web Library),自定義組件框架
  • 組件系統:聲明式組件系統,使用JavaScript邏輯和XML模板
  • 狀態管理:使用useState鉤子進行狀態管理
  • 模板引擎:基于XML的模板系統
Django
  • 前端框架:無內置前端框架,通常與第三方框架集成
  • 組件系統:無內置組件系統
  • 模板引擎:Django模板語言(DTL)
  • 資源管理:通過staticfiles應用管理靜態資源
Flask
  • 前端框架:無內置前端框架,完全自由選擇
  • 組件系統:無內置組件系統
  • 模板引擎:使用Jinja2模板引擎
  • 資源管理:無內置資源管理

Odoo 18在前端技術上更加現代化,采用了類似React/Vue的組件化開發方式,而Django和Flask則更加靈活,允許開發者自由選擇前端技術棧。

4.3 ORM與數據模型對比

Odoo 18
  • ORM系統:自定義ORM,緊密集成PostgreSQL
  • 模型定義:通過Python類定義,使用特定屬性配置
  • 字段系統:豐富的字段類型,包括復雜的關系字段
  • 繼承機制:支持多種繼承方式(擴展繼承、委托繼承)
  • 數據庫支持:主要支持PostgreSQL
  • 查詢API:域表達式和搜索API
Django
  • ORM系統:內置強大的ORM
  • 模型定義:通過Python類定義,使用Meta內部類配置
  • 字段系統:多種字段類型,包括關系字段
  • 繼承機制:支持三種繼承方式(抽象基類、多表繼承、代理模型)
  • 數據庫支持:支持多種數據庫(PostgreSQL、MySQL、SQLite等)
  • 查詢API:QuerySet API,支持鏈式調用
Flask
  • ORM系統:無內置ORM,通常使用SQLAlchemy等第三方ORM
  • 模型定義:取決于所選ORM
  • 字段系統:取決于所選ORM
  • 繼承機制:取決于所選ORM
  • 數據庫支持:取決于所選ORM,通常支持多種數據庫
  • 查詢API:取決于所選ORM

Odoo 18的ORM更加專注于業務模型和關系,提供了豐富的業務相關功能,而Django的ORM更加通用和靈活,Flask則完全依賴第三方ORM解決方案。

4.4 模塊化與擴展性對比

Odoo 18
  • 模塊系統:高度模塊化,每個功能都是獨立模塊
  • 模塊結構:標準化目錄結構
  • 依賴管理:通過manifest文件聲明模塊依賴
  • 擴展機制:強大的繼承和覆蓋機制
  • 應用商店:Odoo應用商店提供大量現成模塊
Django
  • 應用系統:基于應用的模塊化
  • 應用結構:標準化目錄結構
  • 依賴管理:通過INSTALLED_APPS設置聲明應用依賴
  • 擴展機制:中間件、信號系統、類繼承
  • 插件生態:豐富的第三方包和插件
Flask
  • 擴展系統:基于擴展的模塊化
  • 藍圖系統:使用藍圖組織大型應用
  • 依賴管理:無內置依賴管理
  • 擴展機制:高度靈活,通過擴展和鉤子函數實現
  • 插件生態:豐富的Flask擴展生態系統

Odoo 18的模塊化更加業務導向,模塊通常代表完整的業務功能,而Django的應用通常代表系統的一部分功能,Flask則通過擴展和藍圖實現更自由的模塊化。

4.5 性能與可擴展性對比

Odoo 18
  • 性能特點:為企業級應用優化,但完整安裝較重
  • 緩存系統:內置多級緩存機制
  • 并發處理:使用多進程工作模型
  • 擴展策略:可通過水平擴展和負載均衡提高性能
  • 適用規模:從小型企業到大型企業
Django
  • 性能特點:為大型應用設計,性能良好
  • 緩存系統:強大的緩存框架
  • 并發處理:支持多種并發模型
  • 擴展策略:良好的水平擴展能力
  • 適用規模:從中小型到大型Web應用
Flask
  • 性能特點:輕量級,基礎性能優秀
  • 緩存系統:通過擴展實現
  • 并發處理:依賴WSGI服務器
  • 擴展策略:高度靈活,取決于具體實現
  • 適用規模:從小型應用到中型應用

在性能方面,Flask由于其輕量級特性,基礎性能最好,但缺乏內置的性能優化機制;Django提供了良好的性能和可擴展性平衡;Odoo 18則針對企業應用場景進行了優化,但完整安裝較為龐大。

4.6 開發效率與學習曲線對比

Odoo 18
  • 開發效率:對標準業務流程開發效率高,定制復雜功能需要深入了解框架
  • 學習曲線:較陡峭,需要理解特定的框架概念和約定
  • 文檔質量:官方文檔全面但部分內容深度不足
  • 社區支持:活躍的社區和商業支持
  • 調試工具:內置開發者模式和調試工具
Django
  • 開發效率:通過內置功能提高開發效率
  • 學習曲線:中等,框架概念清晰但全面掌握需要時間
  • 文檔質量:優秀的官方文檔和教程
  • 社區支持:龐大而活躍的社區
  • 調試工具:強大的調試工具和日志系統
Flask
  • 開發效率:簡單應用開發迅速,復雜應用需要更多手動配置
  • 學習曲線:平緩,核心概念簡單
  • 文檔質量:簡潔清晰的官方文檔
  • 社區支持:活躍的社區
  • 調試工具:通過擴展提供調試功能

在開發效率方面,Odoo 18對于標準業務流程的開發效率最高,因為它提供了大量預構建的業務功能;Django通過內置功能提高了Web應用開發效率;Flask則在簡單應用開發上效率最高,但復雜應用需要更多配置。

五、Odoo 18框架的最佳實踐與應用場景

5.1 適用場景分析

Odoo 18框架特別適合以下應用場景:

  • 企業資源規劃(ERP):Odoo 18提供了完整的ERP功能,包括銷售、采購、庫存、制造、會計等
  • 客戶關系管理(CRM):內置的CRM模塊支持客戶管理、銷售漏斗、機會跟蹤等
  • 電子商務平臺:Odoo 18的電子商務模塊支持在線商店、產品管理、支付處理等
  • 項目管理系統:項目模塊支持任務管理、時間跟蹤、甘特圖等
  • 定制業務應用:通過模塊化開發,可以快速構建定制的業務應用

相比之下,Django更適合內容管理系統、社交網絡和通用Web應用,Flask則適合微服務、API和簡單Web應用。

5.2 開發最佳實踐

在Odoo 18開發中,以下是一些最佳實踐:

  • 模塊化設計:將功能拆分為獨立模塊,便于維護和復用
  • 繼承而非修改:通過繼承擴展現有功能,避免直接修改核心代碼
  • 遵循ORM規范:充分利用ORM功能,避免直接SQL操作
  • 安全性考慮:正確配置訪問權限和記錄規則
  • 性能優化:合理使用索引、緩存和計算字段
  • 前端組件化:使用OWL組件化開發前端,提高代碼復用性
  • 測試驅動開發:編寫單元測試和集成測試,確保代碼質量

5.3 框架選擇建議

在選擇Odoo 18、Django或Flask時,可以考慮以下因素:

  • 項目需求:如果需要完整的企業應用功能,選擇Odoo 18;如果需要通用Web應用,選擇Django;如果需要輕量級API或微服務,選擇Flask
  • 團隊經驗:考慮團隊對各框架的熟悉程度
  • 開發周期:Odoo 18對標準業務流程開發速度快,Django對通用Web應用開發效率高,Flask對簡單應用開發迅速
  • 可擴展性需求:考慮未來的擴展需求和系統規模
  • 集成需求:考慮與現有系統的集成需求

六、總結與展望

6.1 Odoo 18框架的創新點

Odoo 18框架在以下方面展現了創新:

  • OWL前端框架:引入現代化的組件化開發方式
  • 模塊化架構:高度模塊化的設計,支持靈活擴展
  • 強大的ORM:專為業務應用優化的ORM系統
  • 全功能集成:提供從前端到后端的完整解決方案
  • 業務流程自動化:支持復雜業務流程的自動化

6.2 與Django、Flask的互補性

Odoo 18、Django和Flask并非完全競爭關系,它們在不同場景下可以互補:

  • Odoo 18:適合企業應用和業務流程管理
  • Django:適合內容管理和通用Web應用
  • Flask:適合微服務和API開發

在某些復雜系統中,甚至可以看到這些框架共存的情況,例如使用Flask開發API服務,Django開發內容管理系統,Odoo 18處理企業業務流程。

6.3 未來發展趨勢

Odoo框架的未來發展趨勢可能包括:

  • 更深入的AI集成:將人工智能能力融入業務流程
  • 更強大的移動支持:增強移動應用體驗
  • 更靈活的云部署:簡化云環境部署和管理
  • 更開放的集成接口:提供更多與第三方系統集成的能力
  • 更現代化的前端體驗:繼續改進OWL框架和用戶界面

參考資料

  1. Cybrosys Technologies. (2025). An Overview of OWL Components in Odoo 18. https://www.cybrosys.com/blog/an-overview-of-owl-components-in-odoo-18
  2. Cybrosys Technologies. (2024). An Overview of Model Attributes in Odoo 18. https://www.cybrosys.com/blog/an-overview-of-model-attributes-in-odoo-18
  3. 1010Analytics. (2024). Comparing Flask, Django, and Odoo: An In-Depth Architectural Analysis for Choosing the Right Framework. https://medium.com/@data.scientist1010/comparing-flask-django-and-odoo-an-in-depth-architectural-analysis-for-choosing-the-right-3245c29db78d
  4. Odoo S.A. (2025). Odoo 18.0 documentation. https://www.odoo.com/documentation/18.0/
  5. SDLC Corp. (2024). An Overview of ORM Methods in Odoo 18. https://sdlccorp.com/post/an-overview-of-orm-methods-in-odoo-18/
  6. Timus Consulting. (2024). Comprehensive Guide to ORM Methods in Odoo 18. https://timusconsulting.com/comprehensive-guide-to-orm-methods-in-odoo-18/
  7. Zbeantech. (2025). Odoo OWL Framework. https://www.zbeanztech.com/blog/general-11/odoo-owl-framework-140

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83325.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83325.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83325.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSS3 漸變、陰影和遮罩的使用

全文目錄&#xff1a; 開篇語**前言****1. CSS3 漸變 (Gradient)****1.1 線性漸變 (linear-gradient)****1.2 徑向漸變 (radial-gradient)** **2. CSS3 陰影 (Shadow)****2.1 盒子陰影 (box-shadow)****2.2 文本陰影 (text-shadow)** **3. CSS3 遮罩 (Mask)****3.1 基本遮罩 (m…

[Linux]虛擬地址到物理地址的轉化

[Linux]虛擬地址到物理地址的轉化 水墨不寫bug 文章目錄 一、再次認識地址空間二、頁表1、頁表的結構設計2、頁表節省了空間&#xff0c;省在哪里&#xff1f;3、頁表的物理實現 一、再次認識地址空間 OS和磁盤交互的內存基本單位是4KB&#xff0c;這4KB通常被稱為內存塊。OS對…

Kubernetes(K8s)核心架構解析與實用命令大全

在容器化技術席卷全球的今天&#xff0c;Kubernetes&#xff08;簡稱K8s&#xff0c;以“8”代替“ubernete”八個字母&#xff09;已成為云原生應用部署和管理的核心基礎設施。作為Google基于內部Borg系統開源打造的容器編排引擎&#xff0c;K8s不僅解決了大規模容器管理的難題…

基于微信小程序的scratch學習系統

博主介紹&#xff1a;java高級開發&#xff0c;從事互聯網行業六年&#xff0c;熟悉各種主流語言&#xff0c;精通java、python、php、爬蟲、web開發&#xff0c;已經做了六年的畢業設計程序開發&#xff0c;開發過上千套畢業設計程序&#xff0c;沒有什么華麗的語言&#xff0…

postgresql 流復制中指定同步的用戶

postgresql 流復制中指定同步的用戶 在創建postgresql流復制的過程中&#xff0c;可以指定用戶名。 主庫pg_hba.conf配置 vi $PGDATA/pg_hba.conf host replication repl 192.168.56.12/32 md5 host all all 0.0.0.0/0 md5主庫創建同步的用戶 # 主庫創建 replicator 流復制…

基于springboot的運動員健康管理系統

博主介紹&#xff1a;java高級開發&#xff0c;從事互聯網行業六年&#xff0c;熟悉各種主流語言&#xff0c;精通java、python、php、爬蟲、web開發&#xff0c;已經做了六年的畢業設計程序開發&#xff0c;開發過上千套畢業設計程序&#xff0c;沒有什么華麗的語言&#xff0…

工具識別系統Python+深度學習+人工智能+卷積神經網絡算法+TensorFlow+圖像識別

一、介紹 工具識別系統&#xff0c;使用Python作為主要編程語言&#xff0c;基于TensorFlow搭建卷積神經網絡算法&#xff0c;通過收集了8種常見的日常工具圖片&#xff08;“汽油罐&#xff08;Gasoline Can&#xff09;”, “錘子&#xff08;Hammer&#xff09;”, “鉗子&…

2024 CKA模擬系統制作 | Step-By-Step | 8、題目搭建-創建 Ingress

目錄 ??????免費獲取題庫配套 CKA_v1.31_模擬系統 一、題目 二、核心考點 Ingress 資源定義 Ingress Controller 依賴 服務暴露驗證 網絡層次關系 三、搭建模擬環境 1.創建命名空間 2.安裝ingress ingress-nginx-controller 3.創建hello.yaml并部署 四、總結 …

關于uv 工具的使用總結(uv,conda,pip什么關系)

最近要開發MCP 項目&#xff0c;uv工具使用是官方推薦的方式&#xff0c;逐要了解這個uv工具。整體理解如下&#xff1a; 一.uv工具的基本情況 UV 是一個由 Rust 編寫的現代化 Python 包管理工具&#xff0c;旨在通過極速性能和一體化功能替代傳統工具&#xff08;如 pip、vi…

嵌入式學習筆記 - 新版Keil軟件模擬時鐘Xtal灰色不可更改的問題

在新版Keil軟件中&#xff0c;模擬時鐘無法修改XTAL頻率&#xff0c;默認只能使用12MHz時鐘。?這是因為Keil MDK從5.36版本開始&#xff0c;參數配置界面不再支持修改系統XTAL頻率&#xff0c;XTAL選項變為灰色&#xff0c;無法修改。這會導致在軟件仿真時出現時間錯誤的問題&…

Spring AI Image Model、TTS,RAG

文章目錄 Spring AI Alibaba聊天模型圖像模型Image Model API接口及相關類實現生成圖像 語音模型Text-to-Speech API概述實現文本轉語音 實現RAG向量化RAGRAG工作流程概述實現基本 RAG 流程 Spring AI Alibaba Spring AI Alibaba實現了與阿里云通義模型的完整適配&#xff0c;…

Java進階---JVM

JVM概述 JVM作用&#xff1a; 負責將字節碼翻譯為機器碼&#xff0c;管理運行時內存 JVM整體組成部分&#xff1a; 類加載系統(ClasLoader)&#xff1a;負責將硬盤上的字節碼文件加載到內存中 運行時數據區(RuntimeData Area)&#xff1a;負責存儲運行時各種數據 執行引擎(Ex…

數據類型檢測有哪些方式?

typeof 其中數組 對象 null都會判斷為Object,其他正確 typeof 2 // number typeof true //bolean typeof str //string typeof [] //Object typeof function (){} // function typeof {} //object typeof undefined //undefined typeof null // nullinstanceof 判斷…

NodeJS全棧開發面試題講解——P6安全與鑒權

? 6.1 如何防止 SQL 注入 / XSS / CSRF&#xff1f; 面試官您好&#xff0c;Web 安全三大經典問題分別從不同層面入手&#xff1a; &#x1f538; SQL 注入&#xff08;Server端&#xff09; 原理&#xff1a;惡意用戶將 SQL 注入查詢語句拼接&#xff0c;導致數據泄露或破壞…

npm error Cannot find module ‘negotiator‘ 的處理

本想運行npm create vuelatest&#xff0c;但提示&#xff1a; npm error code MODULE_NOT_FOUND npm error Cannot find module negotiator npm error Require stack: npm error - C:\Users\Administrator\AppData\Roaming\nvm\v18.16.1\node_modules\npm\node_modules\tuf-j…

Python爬蟲:AutoScraper 庫詳細使用大全(一個智能、自動、輕量級的網絡爬蟲)

更多內容請見: 爬蟲和逆向教程-專欄介紹和目錄 文章目錄 一、AutoScraper概述1.1 AutoScraper介紹1.2 安裝1.3 注意事項二、基本使用方法2.1 創建 AutoScraper 實例2.2 訓練模型2.3 保存和加載模型2.4 數據提取方法2.5 自定義規則三、高級功能3.1 多規則抓取3.2 分頁抓取3.3 代…

【Netty系列】解決TCP粘包和拆包:LengthFieldBasedFrameDecoder

目錄 如何使用&#xff1f; 1. 示例代碼&#xff08;基于Netty&#xff09; 2. 關鍵參數解釋 3. 協議格式示例 4. 常見配置場景 場景1&#xff1a;長度字段包含自身 場景2&#xff1a;長度字段在消息中間 5. 注意事項 舉個例子 完整示例&#xff1a;客戶端與服務端交互…

哈爾濱工業大學提出ADSUNet—紅外暗弱小目標鄰幀檢測新框架

ADSUNet: Accumulation-Difference-Based Siamese U-Net for inter-frame Infrared Dim and Small Target Detection 作者單位&#xff1a;哈爾濱工業大學空間光學工程研究中心 引用: Liuwei Zhang, Yuyang Xi, Zhipeng Wang, Wang Zhang, Fanjiao Tan, Qingyu Hou, ADSUNet: A…

Linux開發追蹤(IMX6ULL篇_第一部分)

前言 參數&#xff1a;cortex-A7 698Mhz flash 8GB RAM 512M DDR3 2個100M網口 單核 初期&#xff1a; 一、安裝完虛擬機之后&#xff0c;第一步先設置文件之間可以相互拷貝復制&#xff0c;以及通過CRT連接到虛擬機等 折磨死人了啊啊啊啊啊啊 1、關于SSH怎么安裝…

【萌筆趣棋】網頁五子棋項目測試報告

目錄 一.項目介紹 &#xff08;一&#xff09;項目簡介 &#xff08;二&#xff09;功能介紹 &#xff08;三&#xff09;頁面展示 1.注冊頁面 2.登錄頁面 3.游戲大廳頁面 4.游戲房間頁面&#xff08;對戰&#xff09; 二.功能測試 &#xff08;一&#xff09;出現的…