odoo10學習筆記十二:web controller

 

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

 

一:路由html

odoo.http.route(route=None, **kw) 裝飾器能夠將對應方法裝飾爲處理對應的http請求,該方法須是Controller的子類。java

複製代碼
複製代碼
route -- 字符串或數組,決定哪一個http請求匹配所裝飾的方法,能夠是單個字符串、或多個字符串的數組
type -- 請求的類型,能夠是http或json
auth -- 認證方法的類型,能夠是如下幾種:
    user - 必須是認證的用戶,該請求基於已認證的用戶
    public - 當不經過認證訪問時使用公用的認證
    none - 相應的方法老是可用,通常用於框架和認證模塊,對應請求沒有辦法訪問數據庫或指向數據庫的設置
methods 這個請求所應用的一系列http方法,若是沒指定則是全部方法
cors 跨域資源cors參數
csrf(boolean) 是否開啓CSRF保護,默認True
1.若是表單是用python代碼生成的,可經過request.csrf_token() 獲取csrf
2.若是表單是用javascript生成的,CSRF token會自動被添加到QWEB環境變量中,經過require('web.core').csrf_token使用
3.若是終端可從其餘地方以api或webhook形式調用,須要將對應的csrf禁用,此時最好用其餘方式進行驗證
複製代碼
複製代碼

 

二:請求python

請求對象在收到請求時自動設置到odoo.http.request。web

class odoo.http.WebRequest(httprequest)

全部odoo WEB請求的父類,通常用於進行請求對象的初始化:數據庫

複製代碼
複製代碼
httprequest 原始的werkzeug.wrappers.Request對象
params 請求參數的映射
cr 當前方法調用的初始遊標,當使用none的認證方式時讀取遊標會報錯
context 當前請求的上下文鍵值映射
env 綁定到當前請求的環境
session 儲存當前請求session數據的OpenERPSession
debug 指定當前請求是不是debug模式
db 當前請求所關聯的數據庫,當使用none認證時爲None
csrf_token(time_limit=3600) 爲該請求生成並返回一個token(參數以秒計算,默認1小時,若是傳None表示與當前用戶session時間相同)
複製代碼
複製代碼

class odoo.http.HttpRequest(*args)

用於處理http類型請求的函數,匹配路由參數、查詢參數、表格參數,若是有指定文件也會傳給該方法。爲防止重名,路由參數優先級最高。
該函數的返回有三種:json

  • 無效值,HTTP響應會返回一個204(沒有內容)
  • 一個werkzeug 響應對象
  • 一個字符串或unicode,會被響應對象包裝並使用HTML解析

make_response(data, headers=None, cookies=None)

用於生成沒有HTML的響應 或 自定義響應頭、cookie的html響應
因爲處理函數只以字符串形式返回html標記內容,須要組成一個完整的響應對象,這樣客戶端才能解析api

參數:
data (basestring) -- 響應主體
headers ([(name, value)]) -- http響應頭
cookies (collections.Mapping) -- 發送給客戶端的cookie

not_found(description=None)

給出404 NOT FOUND響應跨域

 

render(template, qcontext=None, lazy=True, **kw)

渲染qweb模板,在調度完成後會對給定的模板進行渲染:數組

參數:
template (basestring) -- 用於渲染的模板
qcontext (dict) -- 用於渲染的上下文環境
lazy (bool) -- 渲染動做是否應該拖延到最後執行
kw -- 轉發到werkzeug響應對象

class odoo.http.JsonRequest(*args)

處理經過http發來的json rpc格式請求:

說明:
1.method -- 忽略
2.params -- 須是一個json格式對象
3.處理方法返回的結果是一個json-rpc格式的,以JSON-RPC Response對象的形式組裝

 

三:響應

class odoo.http.Response(args, *kw)

響應對象經過控制器的路由傳遞,在werkzeug.wrappers.Response以外,該類的構造方法會添加如下參數到qweb的渲染中:

template (basestring) -- 用於渲染的模板
qcontext (dict) -- 用在渲染中的上下文環境
uid (int) -- 用於調用ir.ui.view渲染的用戶id,None時使用當前請求的id

上面的參數在實際渲染以前能夠隨時做爲Response對象的屬性修改

  • render() - 渲染響應對象的模板,並返回內容
  • flatten() - 強制渲染響應對象的模板,將結果設置爲響應主體,並將模板復原

 

四:控制器

通常經過繼承的形式建立:class odoo.http.Controller

以route裝飾器來裝飾定義的方法,提供url路由訪問路徑:

class MyController(odoo.http.Controller)://繼承controller定義控制器
    @route('/some_url', auth='public')//裝飾器路由訪問方法,並指明訪問方式:公開仍是須要用戶登錄
    def handler(self):
        return stuff()
相關文章
相關標籤/搜索