Chcę uzyskać dane w formacie JSON z Regulatora Odoo.py

Przykład:

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'}]

Jak uzyskać dane w formacie JSON, chcę dane z JSON czytać w innej aplikacji z AJAX.

Czy to możliwe, aby wyświetlić JSON po otwarciu URL http: // localhost: 8069 / test_json ???

0
Anastasia_ 17 luty 2017, 17:25

2 odpowiedzi

Najlepsza odpowiedź

Ważną częścią jest prawidłowe określenie typu treści.

import json

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

W swoim kliencie za pomocą JavaScript możesz poprosić o JSON w ten sposób.

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

Lub za pomocą żądań w Pythonie

import requests,json

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

Aby uzyskać dostęp do ciała odpowiedzi

body = res.text

Jeśli chodzi o to, czy możesz po prostu otworzyć przeglądarkę i zobaczyć JSON. Nie, nie domyślnie.

Oto, co dostaję

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'

Prawdopodobnie mógłbyś zrobić coś ładnego, że kontroler, jeśli naprawdę chciałeś go zobaczyć w przeglądarce, jak również zrobić żądania JSON. Publikowałbym jednak drugie pytanie.

2
Phillip Stack 20 luty 2017, 13:49

Twój kontroler punkt końcowy wygląda dobrze i powinien działać poprawnie, więc myślę, że twoje główne pytanie brzmi, jak go przetestować.

Po zadowiedzieniu, że typ punktu końcowego jest json, Odoo sprawdzi, czy nagłówek Typ treści żądania jest w rzeczywistości JSON, więc w celu przetestowania go Twoje żądania będą musiały mieć zestaw nagłówka {X1}}. Jest to nieco trudne przy użyciu regularnej przeglądarki, chyba że edytujesz nagłówki żądania przed wyjazdem lub zadzwonić do swojego punktu końcowego JavaScript przez AJAX.

Alternatywnie możesz przetestować interfejs API z wiersza polecenia za pomocą narzędzia jak curl:

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

--data "{}" Tutaj wskazuje pustą strukturę JSON, która zostanie przekazana do twojego punktu końcowego jako parametry żądania.

Należy pamiętać, że możesz również przekazać dodatkowy nagłówek zawierający pliki cookie session_id Jeśli używasz więcej niż jednej bazy danych ODOO .

0
Naglis 17 luty 2017, 15:45