iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0
Odoo

Odoo 16 入門介紹系列 第 18

Controller 的介紹及使用

  • 分享至 

  • xImage
  •  

MVC架構:Odoo的Web應用程序使用MVC(Model-View-Controller)架構來組織代碼。控制器位於這個架構的控制層,負責處理客戶端的HTTP請求,並決定如何呈現頁面。

在開始之前我們須確保以下:

匯入模組:

# my_module/__init__.py
# 在開始controller設定之前,我們必須先將我們controllers給import進去
from . import controllers

# my_module/controllers/__init__.py
# 在開始controller設定之前,我們必須先將我們library_controller.py給import進去
from . import library_controller

# library_controller.py
from odoo import http
from odoo.http import request

class library_controller(http.Controller):
  @http.route('/my_library/books', method=['GET'], type='http', auth='none')
  def books(self):
    books = request.env['library.book'].sudo().search([])
    html_result = '<html><body><ul>'
    for book in books:
      html_result += "<li> %s </li>" % book.name
    html_result += '</ul></body></html>'
    return html_result

現在讓我們對這段程式碼進行解釋:

在 my_module/init.py 中,你從 controllers 模組中匯入了控制器。

在 my_module/controllers/init.py 中,你從 library_controller 模組中匯入了 library_controller。

library_controller.py 中是控制器的主要程式碼,它執行以下操作:

從 odoo 模塊中匯入 http 和 request,以便使用 Odoo 的 HTTP 功能。

定義一個名為 library_controller 的類別,該類別繼承自 http.Controller,這是 Odoo 提供的基本控制器類別。

使用 @http.route 裝飾器定義一個路由,這個路由處理 /my_library/books 這個 URL 後綴的 HTTP GET 請求。具體參數如下:

method=['GET']:指定這個路由僅處理 HTTP GET 請求。
type='http':表示這是一個 HTTP 路由。
auth='none':表示這個路由不需要身份驗證,任何人都可以訪問它。
定義一個名為 books 的方法,該方法處理 /my_library/books 路由的 GET 請求。方法的參數 self 是標準的 Python 慣例,表示這個方法屬於 library_controller 類別。

在 books 方法中,首先執行了以下操作:

使用 request.env['library.book'] 取得名為 library.book 的 Odoo 模型的記錄集(recordset)。
使用 .sudo() 方法取得超級使用者權限,以確保能夠讀取所有記錄。
使用 .search([]) 方法檢索所有圖書記錄,[] 表示檢索所有記錄。
接下來,建立一個 HTML 結果的字串 html_result,並使用 for 迴圈將圖書的名稱以無序列表的形式添加到字串中。

最後,將建構的 HTML 字串 html_result 作為 HTTP 回應返回,這樣當用戶訪問 /my_library/books 時,將看到包含圖書列表的網頁。

總之,這段程式碼是一個使用 Odoo 框架建立的控制器,它用於處理 HTTP GET 請求並呈現圖書列表。它使用了 Odoo 的 MVC 架構,其中控制器負責處理客戶端的請求,從模型中檢索數據,然後將結果以 HTML 形式返回給客戶端。路由的設置確保了這個網頁可以被任何人訪問,無需進行身份驗證。


上一篇
view 功能的加強運用
下一篇
@router 介紹
系列文
Odoo 16 入門介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言