odoo10學習筆記十七:controller

 

轉載請註明原文地址:http://www.javashuo.com/article/p-fwkynqmy-me.html html

 

 

一:controller簡述python

odoo裏面的controller類似於springMVC,也是根據url來控制請求,把請求處理映射到具體某個方法上的。spring

類比於springmvc中,根據請求,在請求處理方法中處理數據,而後控制view頁面跳轉。數據庫

在odoo中的controller也是相似的工做原理:mvc

在view層,新建xml文件,定義視圖模版;函數

而後在controller目錄下,新建controller類,在其中,定義請求處理方法,在方法上方經過 @http:route('url',auth='public/user') 控制請求映射;學習

在方法中,處理數據,而後經過 http.request.render('模塊名.視圖模版id',視圖模版所需參數列表......) 把參數傳遞給視圖模板並渲染出頁面,而後返回客戶端做響應。url

 

二:一個簡單的課程列表展現spa

1:首先,新建一個視圖模板文件code

views/template.xml

複製代碼
複製代碼
<odoo>
    <data>
        <template id="template_index">
            <t t-foreach="courses" t-as="course">
                <p><t t-esc="course"/></p>
            </t>
        </template>
    </data>
</odoo>
複製代碼
複製代碼

模版文件解析:

id爲:template_index

模版內容:遍歷 courses,並打印輸出。

 

2:在manifest中註冊視圖模版

  'data': [
        'views/template.xml',
    ],

 

3:在controller文件夾下,新建controller.py

先在__init__.py導入controller,不然odoo找不到

複製代碼
複製代碼
# -*- coding: utf-8 -*-
from odoo import http
class Controller(http.Controller):
    @http.route("/open/courses/",auth="public")
    def index(self,**kw):
        return http.request.render("模塊名.template_index",{'courses':['odoo','python','bootstarp']})
複製代碼
複製代碼

controller內容:

繼承 http.Controller類定義控制器;

經過 @http.route(url,auth=)控制請求映射,以及訪問權限(公開 or 須要登錄)

最後,經過 http.request.render('模塊名.視圖模板id',{'參數名'(與視圖模版中遍歷的參數一致):參數值})  傳參並渲染獲得響應頁面並返回。

 

4:啓動odoo,安裝/更新模塊,而後經過  ip:8069/url  發起訪問,便可到達響應頁面。(url爲上面定義控制器時的映射路徑)

 

三:使用ORM爲視圖文件傳遞內容

繼承自models.Model而定義的類默認具備了odoo的ORM接口,也就是說,該類的全部實例對象都會自動保存到數據庫中。

根據這個特性,咱們能夠這樣往視圖模版傳遞數據:

定義一個數據模型;

在odoo中建立該數據模型的一系列紀錄(一條記錄一個實例對象);

在視圖文件中,遍歷、使用對象,經過  對象.字段名  調用紀錄的具體字段內容;

最後,在控制器中,使用環境上下文,查找該數據模型的全部紀錄,而後傳參便可。

 

在視圖文件中遍歷對象,經過對象.字段名調用數據:

            <t t-foreach="courses" t-as="course">
            <p><t t-esc="course.id"/></p>    <p><t t-esc="course.name"/></p>
            </t>

在控制器中,先用環境上下文獲取數據模型的全部紀錄,獲得一個紀錄集。而後經過 紀錄集.search()函數,返回一個紀錄列表,傳遞給視圖模板:

    def index(self,**kw):
       #經過環境上下文獲取數據模型的全部紀錄
        courses=http.request.env['openacademy.course']
       #紀錄集.search(),返回紀錄列表傳遞給視圖模版進行渲染
        return http.request.render("openacademy.template_index",{'courses':courses.search([])})

最後,更新模塊,在模塊中建立一些紀錄,而後經過url訪問,查看紀錄集遍歷結果。

相關文章
相關標籤/搜索