轉載請注明原文地址:https://www.cnblogs.com/cnodoo/p/9307315.html
使用jinja2渲染的頁面,可以直接在調用template.render()時傳遞參數給頁面,頁面通過EL表達式獲取即可。
而對應一般webapp、移動端app發過來的請求,我們只能返回數據的情況下,應該怎么做呢?
一:返回文本數據
如果是返回文字信息的話,我們使用JSON作為傳輸媒介。
在odoo的controller中,把數據存到數組、字典、對象中,然后使用將其轉為JSON數據:
import json//導入json模塊 //在方法中 jsonStr = json.dumps(datas)//把數據轉化為json格式 return jsonStr.decode('unicode_escape')//return給發出請求者
附:
在app端如何提取數據:以接收到json數組為例:
for (let i = 0; i < json.length; i++) {//遍歷返回到json數組 var value = json[i].key//根據key提取內容 }
二:返回多媒體
對於視頻、音頻、圖片等多媒體內容的傳輸,我們采用IO流的形式。
from cStringIO import StringIO import base64 record = request.env['模型名'].sudo().search([(搜索條件)]) return http.send_file(StringIO(base64.standard_b64decode(record.多媒體字段)), filename="文件名可以自己定,注意后綴名一定要有,不然發回去的IO流不能被正確解析",as_attachment=True)
其中:多媒體字段可以通過pgAdmin查看對應的模型等數據庫表,存儲內容是 二進制數據 的就是保存多媒體內容的字段,用該字段名來提取二進制內容。
由於odoo默認是用base64格式來存儲數據的,因此我們要對提取出來的二進制數據用base64進行解碼,解碼后得到的數據串作為參數,傳給StringIO,生成數據流,然后發回去。