微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从flask函数调用Odoo中的json请求?

如何解决如何从flask函数调用Odoo中的json请求?

嗨,我在 odoo 类型中创建了一个控制器路由 json,我正在尝试从 Flask 函数调用该路由。但我遇到了以下错误

回溯(最近一次调用最后一次):文件 "/home/vox-lap-009/Projects/odoo-14EE/odoo/addons/base/models/ir_http.py",第 237 行,在 _dispatch result = request.dispatch() 文件“/home/vox-lap-009/Projects/odoo-14EE/odoo/http.py”,第 682 行,在 派遣 result = self._call_function(**self.params) 文件“/home/vox-lap-009/Projects/odoo-14EE/odoo/http.py”,第325行,在 _call_function 引发 werkzeug.exceptions.BadRequest(msg % params) 异常

上述异常是以下异常的直接原因:

回溯(最近一次调用最后一次):文件 “/home/vox-lap-009/Projects/odoo-14EE/odoo/http.py”,第 638 行,在 _handle_exception return super(JsonRequest,self)._handle_exception(exception) 文件“/home/vox-lap-009/Projects/odoo-14EE/odoo/http.py”,第314行,在 _handle_exception 从 new_cause werkzeug.exceptions.BadRequest 引发 exception.with_traceback(None): 400 Bad Request: ,/: 函数声明为能够 处理“http”类型的请求,但使用类型请求调用 'json'

这是我在 odoo 中的控制器,

    # -*- coding: utf-8 -*-
    from odoo import http
    from odoo.http import request
    import json

    class CreateLead(http.Controller):
        @http.route('/createLead',type="json",methods=['POST'],website=False,auth="public")
        def CreateCustomer(self,**kw):
            print('kwww',kw)
            try:
                obj_partner = request.env['res.partner']
                obj_lead = request.env['crm.lead']
                name = kw.get('name')
                phone = kw.get('phone')
                email = kw.get('email')
                partner_id = obj_partner.sudo().search([('phone','=',phone)])
                if not partner_id:
                    vals = {'name':name,'phone':phone,'email':email
                    }
                    partner_id = obj_partner.sudo().create(vals)
                lead_vals = {
                    'partner_id':partner_id.id,'name':kw.get('product'),'description':'Delivery at '+kw.get('address')+'\nDate:'+kw.get('date')+''
                }
                lead_id = obj_lead.sudo().create(lead_vals)
                return json.dumps({'status':'OK','id':lead_id.id})
            except Exception as e:
                return json.dumps({'status':'Failed','error':str(e)})

这是我在上面调用的python函数

        import requests
        import json
        # odoo_url = "http://voxtronindia.fortiddns.com:8013/"
        odoo_url = "http://localhost:5014/"
        headers = {'Content-Type': 'application/json'}
        url = odoo_url+'/createLead'

        vals = {
        'name': 'Agu','phone': '919567781168','email': 'Agu@gmail.com','product': 'mac','address': 'Thrissur \nKoratty\nKerala','date': '2021-03-02'}
        val = dict(params=vals)
        print('valsssssssssssssss',val)
        r = requests.post(url,data=json.dumps(val),headers=headers)
        # r=requests.post(url=url,headers=headers,data=json.dumps(val))
        # r=requests.post(url=url,json=val)
        print('result',r.json())

注意:我在其他一些项目中使用了相同的函数,它工作正常,如果我从 restclient(Chrome 扩展程序)调用它,路由也能完美运行。

如何解决这个问题?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。