2017-02-17 7 views
0

반환 데이터 내가 odoo의 controllery.py에서 JSON 형식의 데이터를 얻을 싶어 9

예 : JSON 형식의 데이터를 얻을 방법

import openerp.http as http 
from openerp.http import request 

class MyController(http.Controller): 

    @http.route('/test_html', type="http", auth="public") 
    def some_html(self): 
     return "<h1>Test</h1>" 

    #Work fine when open http://localhost:8069/test.html 

    @http.route('/test_json', type="json", website=True, auth="public") 
    def some_json(self): 
     return [{"name": "Odoo", 'website': 'www.123.com'}] 

, 내가 JSON에서 데이터를 다른 읽을 싶어 app with ajax.

열린 URL을보고 json을 (를) 볼 수 있습니까? http://localhost:8069/test_json ???

답변

1

중요한 부분은 요청의 contentType을 적절하게 정의하는 것입니다.

import json 

@http.route('/test_json', type="json", auth="public") 
def some_json(self): 
    return json.dumps({"name": "Odoo", 'website': 'www.123.com'}) 

클라이언트에서 자바 스크립트를 사용하면 json을 이와 같이 요청할 수 있습니다. 파이썬

import requests,json 

res = requests.post("http://localhost:8069/test_json",data=json.dumps({}),headers={"Content-Type":"application/json"}) 

에서

$.ajax({ 
     type: "POST", 
     url: "/test_json", 
     async: false, 
     data: JSON.stringify({}), 
     contentType: "application/json", 
     complete: function (data) { 
      console.log(data); 
     } 
}); 

또는 사용 요청은 단순히 브라우저를 열고 JSON을 볼 수 있는지 여부에 관해서는 응답 본문

body = res.text 

에 액세스 할 수 있습니다. 아니, 기본적으로 아닙니다. 여기

내가 당신은 아마 당신이 정말로 브라우저에서 볼뿐만 아니라 JSON 요청을 할 수 있기를 원하는 경우 컨트롤러 꽤 멋진 뭔가를 할 수

Bad Request 

<function some_json at 0x7f48386ceb90>, /test_json: Function declared as capable of handling request of type 'json' but called with a request of type 'http' 

을 얻을 것입니다. 나는 두 번째 질문을 게시 할 것이다.

+0

@Philip Stack Tnx 예를 들어, 다음과 같은 간단한 예제는 내 databse 테이블의 레코드가있는 json.dumps ({ "name": "Odoo", 'website': 'www.123.com'}) res.users). –

+0

레코드에 액세스하려면 현재 사용자 인'http.request.env.user '를 사용하십시오. 다른 사용자'http.request.env [ 'res.users']. sudo(). browse ([user_id])'를 지정하려면 응답 변수에 그것을 빌드 할 수 있습니다. –

+0

안녕하세요 Phillip, 여기 내 예제 https://postimg.org/image/sa4q1miur/입니다. 호출 후 공진 200, 어디서 문제가 있습니까? –

0

컨트롤러 끝 점이 정상적으로 작동하고 올바르게 작동해야하므로, 주된 질문은 테스트하는 방법입니다.

엔드 포인트 유형이 json이라고 선언하면 Odoo는 요청 콘텐츠 유형 헤더가 실제로 JSON인지 확인하므로 테스트하려면 요청에 Content-Type: application/json 헤더 세트가 있어야합니다. JSON 끝점을 Javascript에서 Ajax를 통해 호출하거나 호출하기 전에 요청 헤더를 편집하지 않는 한 일반 브라우저를 사용하면 약간 어렵습니다.

다른 방법으로는 curl 같은 도구를 사용하여 명령 줄에서 API를 테스트 할 수 있습니다

curl 'http://localhost:8069/test_json' -H 'Content-Type: application/json' --data "{}" 

--data "{}"

여기에 요청 매개 변수로 엔드 포인트에 전달됩니다 빈 JSON 구조를 나타냅니다.

두 개 이상의 Odoo 데이터베이스을 사용하는 경우 session_id 쿠키가 들어있는 추가 헤더를 전달해야 할 수도 있습니다.

+0

와우, 우리는 실제로 거의 똑같은 대답을했습니다. –

+0

@Naglis Jonaitas Tnx for help, https://odoo.com/simple_json과 같은 odoo의 온라인 사용 가능한 json입니까? –