2017-10-22 22 views
0

인턴쉽 중 XML-RPC를 통해 Odoo에서 데이터를 검색하는 Django 응용 프로그램을 작성해야하며 지식에 따라 xmlrpc 웹 서버는 XML 형식 만 지원하지만 공식 "Search and read"섹션에서 Odoo10 https://www.odoo.com/documentation/10.0/api_integration.html의 문서를 보면 응답이 JSON 형식 (나에게 좋다) 인 것처럼 보입니다. 나는 뭔가를 놓치고 있는지 궁금해하고있다.XML-RPC를 통한 Odoo와의 상호 작용

설명이 있습니까? 감사.

+0

안녕하세요 @Imed, 내 대답을 업데이트했지만 장고 응용 프로그램에서 XMLRPC 응답을 받기를 원한다면 파이썬으로 작업하는 것을 선호하지 않습니다. XMLRPC 쿼리) 대신 JSON? – forvas

+0

안녕하세요, 사실 JSON 응답을 받기를 원하며 그것이 내가 얻는 것입니다. 그러나 인턴쉽 보고서를 작성하기 시작했을 때 XMLRPC는 XML 응답 만 반환하므로 혼란스러워서 제가이 질문을 한 이유입니다. – Imed

답변

1

정확히 JSON이 아니지만, dumps 메서드를 통해 JSON 문자열로 변환 할 준비가 된 Python 개체 (목록, 사전 등) ... json 라이브러리입니다. XMLRPC로 작업하는이 Python 콘솔의 동작을 살펴보십시오. 먼저 쿼리를 만들었습니다 (search_read 메서드 사용). 그런 다음 배열 (Python 객체) 인받은 결과의 유형을 묻습니다. 이 Python 객체를 JSON 문자열로 변환하려면 dumps 메서드를 사용합니다. 거기에는 JSON이 있습니다.

>>> res = models.execute_kw(
    db, 
    uid, 
    password, 
    'res.partner', 
    'search_read', 
    [[ 
     ['is_company', '=', True], 
     ['customer', '=', True] 
    ]], 
    { 
     'fields': ['name', 'country_id', 'comment'], 
     'limit': 5 
    } 
) 

>>> res 
[ 
    { 
     'comment': False, 
     'country_id': [69, 'Spain'], 
     'id': 1665, 
     'name': 'Customer A' 
    }, { 
     'comment': False, 
     'country_id': [69, 'Spain'], 
     'id': 5799, 
     'name': 'Customer B' 
    }, { 
     'comment': False, 
     'country_id': [69, 'Spain'], 
     'id': 1946, 
     'name': 'Customer C' 
    }, { 
     'comment': False, 
     'country_id': [69, 'Spain'], 
     'id': 1367, 
     'name': 'Customer D' 
    }, { 
     'comment': False, 
     'country_id': [69, 'Spain'], 
     'id': 2066, 
     'name': 'Customer E' 
    } 
] 

>>> type(res) 
<type 'list'> 

>>> import json 
>>> json.dumps(res) 

'[{"comment": false, "country_id": [69, "Spain"], "id": 1665, "name": "CUSTOMER A"}, {"comment": false, "country_id": [69, "Spain"], "id": 5799, "name": "CUSTOMER B"}, {"comment": false, "country_id": [69, "Spain"], "id": 1946, "name": "CUSTOMER C"}, {"comment": false, "country_id": [69, "Spain"], "id": 1367, "name": "CUSTOMER D"}, {"comment": false, "country_id": [69, "Spain"], "id": 2066, "name": "CUSTOMER E"}]' 

>>> your_json = json.dumps(res) # This variable is ready to be sent as JSON 

@ChesuCR 덕분에 대답을 명확히했습니다.

+2

'json.dumps'는 파이썬 객체 (목록, 사전, 대문자로 된 부울 ...)를 JSON 문자열로 변환합니다. 반면에'json.loads'는 JSON 문자열을 파이썬 객체로 변환합니다. 파이썬에서 JSON 객체를 직접 가질 수는 없다. Python 개체를 문자열로 변환하면 외부의 원격 응용 프로그램으로 보내려는 경우 유용합니다. – ChesuCR

+0

맞아요 @ChesuCR, 내 대답이 업데이트되었습니다. 감사합니다! – forvas