Как мне выполнить запрос POST / GET от AJAX к контроллеру пользовательских модулей Odoo 10? (Заблокировано политикой CORS) - PullRequest
0 голосов
/ 30 апреля 2020

Я использую Odoo 10 с пользовательским модулем, и я создал этот простой контроллер. Он отлично работает, когда я захожу http://127.0.0.1:8069/cmodule/cmodule из браузера. Это показывает возвращаемую строку.

Я пробовал и GET и POST, но я получаю тот же результат ошибки. Что-то о политике CORS, блокирующей запрос или что-то в этом роде. Мои силы в Google не нашли никакого способа или альтернативы для этого.

Но когда я пытаюсь сделать запрос через AJAX из моей другой вещи, написанной на PHP / javascript. Я получаю эту ошибку на javascript:

Доступ к XMLHttpRequest в 'http://127.0.0.1: 8069 / cmodule / cmodule / ' from origin 'http://127.0.0.1 'был заблокирован политикой CORS: в запрошенном ресурсе отсутствует заголовок' Access-Control-Allow-Origin '.

И эта ошибка от odoo:

2020-04-30 08: 18: 13,401 23156 ИНФОРМАЦИЯ? werkzeug: 127.0.0.1 - - [30 / Apr / 2020 08:18:13] "GET / cmodule / cmodule / HTTP / 1.1" 404 -

Вот простой код из моего Odoo- 10 пользовательских модулей контроллера:

# -*- coding: utf-8 -*-
from odoo import http

class Cmodule(http.Controller):
    @http.route('/cmodule/cmodule/', auth='public', cors='*')
    # I also tried here auth='none' and method='POST' and method='GET'
    def index(self, **kw):
        datas = http.request.env['product.product'].sudo().search(
            [('product_group', '=', 'assort')], limit=50)
        dstr = ','.join(datas )
        # {'ret_val': dstr }
        # I return {'ret_val': dstr } when doing POST request from AJAX.
        return dstr 

А вот код из моего AJAX запроса:

            $.ajax({
                type: "GET",
                // type: "POST",
                url: "http://127.0.0.1:8069/cmodule/cmodule/",
                // data: { data: 'HELLO' },
                success: function(response){
                    console.log(response);
                }
            });

1 Ответ

1 голос
/ 02 мая 2020

Пока вы пробуете разные вещи, попробуйте простую аутентификацию

import odoo.addons.web.controllers.main as main
class Home(main.Home):
    @http.route('/web/session/authenticate', type='json', auth="none" ,cors='*')
    def authenticate(self, db, login, password, base_location=None): 
    request.session.authenticate(db, login, password)
        return request.env['ir.http'].session_info()

У меня была та же ошибка при доступе к ней из IOS, но с почтальоном она работала нормально, этот код работал нормально, хорошо, вы все сделали в этом коде, но все же

...