這兩者都是關於客戶端和服務器之間的通信。 HttpRequest通過衆所周知的GET和POST方法進行通信。這意味着以下內容:
- 客戶端發送在URL編碼的請求(GET方法)或在HTTP主體(POST方法)
- 服務器返回對應於該請求的對象。可能是一個HTML頁面,PNG圖像,CSS文件,JavaScript,XML編碼數據或其他。
JsonRequest是用於客戶端/服務器通信的另一種協議的實現 - JSON-RPC 2.0。您可能希望lo採取here表格更多信息。這是一個遠程過程調用(RPC)協議,這意味着它允許客戶端啓動服務器上某些方法的執行,並將一些參數傳遞給此方法。作爲響應,客戶端通過方法調用獲取一些數據。
編輯 - 用@ openerpweb.httprequest - 一些關於裝飾器的更多的話@ openerpweb.jsonrequest和@ openerpweb.httprequest
一些方法與@ openerpweb.jsonrequest裝飾,其他方法裝飾。這意味着沒有別的,但是第一組方法將通過JSON RPC協議執行,第二組將通過純HTTP協議訪問。
現在有什麼區別?我是否需要jsonrequest和httprequest?讓它像這樣簡化:JSON更適合在服務器上執行方法並獲得結果。當我們只需訪問服務器上的某些資源時,HTTP更簡單,更易於使用。
爲了清楚起見,我們用一些示例來「裝飾」它。看看web.controllers.main的以下方法。導出類別:
@openerpweb.jsonrequest
def formats(self, req):
""" Returns all valid export formats
:returns: for each export format, a pair of identifier and printable name
:rtype: [(str, str)]
"""
...
此方法接受一些參數並返回包含所有已知導出格式的列表(Python列表對象)。它將在客戶端的一些python代碼中以編程方式調用。
另一邊是「HTTP」方法 - 像法CSS()的web.controllers.main.Web類:
@openerpweb.httprequest
def css(self, req, mods=None):
....
所有這種方法並是返回一個CSS文件客戶端。這是一個簡單的操作,例如訪問圖像,HTML網頁或服務器上的其他資源。我們在這裏返回的資源與前面例子中的Python列表沒什麼兩樣。我們不需要額外的格式來編碼它。所以我們不需要額外的數據編碼格式作爲JSON和JSON RPC的遠程過程調用協議。
類型=「JSON」:
它將調用JSONRPC作爲參數傳遞給http.route()所以在這裏,將僅存在JSON數據能夠通過JSONRPC通過,這將只接受JSON數據對象作爲參數。
類型= 「HTTP」:
作爲compred到JSON,HTTP將通過http請求參數http.route()不JSON數據。 例子
@http.route('demo_html', type="http") // Work Pefrect when I call this URL
def some_html(self):
return "<h1>This is a test</h1>"
@http.route('demo_json', type="json") // Not working when I call this URL
def some_json(self):
return {"sample_dictionary": "This is a sample JSON dictionary"}
我已經得到了那個之前,但最後感謝Jainik ..! :) –