Monday, 8 May 2017

Write web services using Odoo controllers

In Odoo you can write web-services for outside world. Let's discuss how it can be done using controllers.

Suppose I need cross domain API which will return data in json format. For that we have to enable CORS and have to setup nginx reverse proxy.

Example: API to send teachers data from odoo:

# -*- coding: utf-8 -*-
from odoo.tools.translate import _
from odoo import http
from odoo.http import request
import json
import sys

class odoo_public_data(http.Controller):
    @http.route('/get/teachers', type='http', methods=['GET'], auth="public")

    def get_teachers(self, **kwargs):
        teacher_model = request.env['dps.teacher']
        teacher_ids = teacher_model.sudo().search([])
        teacher_list = {'status': 1, 'data': []}
        try:
            if teacher_ids:
                for teacher in teacher_ids:
                    vals = {
                        'id': teacher.id,
                        'name': teacher.name,
                        'email': teacher.email,
                        'phone': teacher.phone,
                        'school': teacher.partner_id.name,
                    }
                    teacher_list['data'].append(vals)
            return json.dumps(teacher_list)
        except Exception as e:
            print str(e)
            return json.dumps({'status': 0, 'data': 'Some problem with API'})


Please set reverse proxy using tutorial if it's not already set. After that add lines from link(https://enable-cors.org/server_nginx.html) in location block, to enable CORS, of virtual host config file.

Thanks!!!!! Enjoy Programming!!! :)

No comments:

Post a Comment

Thanks for your valuable comments.

Odoo 10: Close wizard and open standard form

Hi, Today we are going to learn how to open standard form after saving data in wizard. Let's say I have created an wizard to fill bas...