Маршрут этого URL должен быть @http.route('/dataset/<string:tracking_number>', type='http or json', auth="user or public")
, в основном метод должен быть таким:
import json
from odoo import http
from odoo.http import Response, request
class tracking(http.Controller):
# if user must be authenticated use auth="user"
@http.route('/dataset/<string:tracking_number>', type='http', auth="public")
def tracking(self, tracking_number): # use the same variable name
result = # compute the result with the given tracking_number and the result should be a dict to pass it json.dumps
return Response(json.dumps(result), content_type='application/json;charset=utf-8',status=200)
Этот метод принимает http
запрос и возвращает ответ json
, если клиентотправляя json
запросов, вы должны изменить type='json'
. не забудьте импортировать файл в __init___.py
.
Давайте рассмотрим пример, скажем, что я хочу вернуть некоторую информацию о sale.order
с помощью ID
в URL
:
import json
from odoo import http
from odoo.http import Response, request
class Tracking(http.Controller):
@http.route('/dataset/<int:sale_id>', type='http', auth="public")
def tracking(self, sale_id):
# get the information using the SUPER USER
result = request.env['sale.order'].sudo().browse([sale_id]).read(['name', 'date_order'])
return Response(json.dumps(result), content_type='application/json;charset=utf-8',status=200)
Поэтому, когда я вхожу в этот URL с помощью моего браузера: http://localhost:8069/dataset/1
:
![repose of my http request](https://i.stack.imgur.com/VZQiP.png)