我想在 Odoo 中接受和回應來自我無法控制的來源的 JSON 請求。這并不簡單的原因是因為 Odoo 強迫我使用 JSON-RPC,這不適合我與之互動的源。
例如,如果我http在@http.route裝飾器中將路由型別設定為,如果 mimetype 是application/json但正文沒有內容,Odoo 將拒絕請求。這在我的情況下不起作用,因為我可能無法選擇其他來源發送給我的內容。此外,除非傳入請求沒有application/jsonmimetype,否則我無法發回自定義 JSON 回應,這同樣不在我的控制范圍內。
我在互聯網上做了很多搜索,并閱讀了很多 Odoo 的 HTTP 源代碼。我到處都看到的“解決方案”是以JsonRequest一種或另一種方式修補課程。這使我確實可以回應我想要的任何內容,但是它不允許我接受服務可能發送給我的任何內容。
我需要能夠處理的一種特定情況是application/json沒有正文的傳入GET 請求。盡管 Odoo 的 JSON-RPC 處理繁重,我怎么能做到這一點?
uj5u.com熱心網友回復:
沒有正確的方法來實作這一點,我認為所描述的方法是可以接受的。它適用于 Odoo 10 到 15 的版本。
在我看來,最好不要理會 JsonRequest 類,讓它完成與 JSON-RPC 相關的作業。odoo.http.Root.get_request 方法根據內容型別構造 json-rpc 或 http 請求物件:
class Root(object):
"""Root WSGI application for the OpenERP Web Client.
"""
# ...
def get_request(self, httprequest):
# deduce type of request
if httprequest.mimetype in ("application/json", "application/json-rpc"):
return JsonRequest(httprequest)
else:
return HttpRequest(httprequest)
這一點似乎是要修補的最相關的一點,從該方法回傳自定義請求類物件。但是,存在一個問題 - 在任何路由檢測之前呼叫此方法。你必須發明一個合適的方法來告訴,哪個請求類物件要回傳。
要了解可能的實作,請參閱OCA base_rest模塊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/345964.html
