как выйти из системы в один клик в odoo 9

Я хочу создать выход из системы одним щелчком мыши для odoo, поэтому я создаю тему odoo и добавляю значок для выхода из системы, когда вы нажимаете на значок, пользователь выходит из системы. поэтому у меня есть кусок кода в .xml

<xpath expr="//ul[@class='nav navbar-nav navbar-right oe_user_menu_placeholder']" position="inside">
    <li><a href="#" class="logout" title="Logout"><i class="fa fa-sign-out"></i></a></li>
</xpath>

и в коде java-скрипта .js

var UserMenu = require('web.UserMenu');
var user_menu=new UserMenu(self);
$(document).ready(function () {
$( ".logout").click(function() {
  $( ".logout").click(function() {
         user_menu.on_menu_logout();
   });
  });
});

поэтому я вызываю функцию on_menu_logout() модуля web, а on_menu_logout() также вызывается, но внутри функции this.trigger ('user_logout'); функция не вызвала . поэтому, если у вас есть какие-либо идеи, пожалуйста, поделитесь со мной, чтобы решить эту проблему.


person Debasish    schedule 05.07.2016    source источник


Ответы (2)


Другой способ сделать это — вызвать http-контроллер, который управляет выходом из системы.

Маршрут контроллера "/web/session/logout"

При вызове этого контроллера он мгновенно отключит пользователя и завершит его сеанс.

Вы можете вызвать этот контроллер следующим образом в своем javascript:

Для этого в объектах Session() существует низкоуровневый API (обычно доступный через openerp.session): метод rpc.

Этот метод просто принимает абсолютный путь (абсолютный URL-адрес JSON-маршрута для вызова) и сопоставление атрибутов со значениями (передается как аргументы ключевого слова в метод Python). Эта функция извлекает возвращаемое значение методов Python, преобразованное в JSON.

Например, чтобы вызвать повторную последовательность контроллера DataSet():

var session = require('web.session');
session.rpc('/web/session/logout', {}).then(function (result) {
console.log('Logout Successful')
}, function () {
// an error occured during during call
});
person Bhavya    schedule 08.07.2016
comment
спасибо @Bhavya за ответ, но этот код будет генерировать ошибку, Отслеживание ошибок сервера Odoo (последний последний вызов): Файл /usr/lib/python2.7/dist-packages/openerp/http.py, строка 646, в _handle_exception вернуть super(JsonRequest, self)._handle_exception(исключение) Файл /usr/lib/python2.7/dist-packages/openerp/http.py, строка 683, в результате отправки = self._call_function(**self .params) Файл /usr/lib/python2.7/dist-packages/openerp/http.py, строка 295, в _call_function поднять werkzeug.exceptions.BadRequest(msg % params) BadRequest: 400: Неверный запрос - person Debasish; 08.07.2016
comment
Функция, объявленная как способная обрабатывать запрос типа «http», но вызываемая с запросом типа «json», означает, что мы должны вызывать контроллер с запросом типа «http», поэтому подскажите, как вызвать функцию в запросе типа 'http' . - person Debasish; 08.07.2016

Я получил ответ, чтобы решить эту проблему, нам не нужен дополнительный javascript, чтобы решить эту проблему, просто следуйте этому коду и добавьте атрибут t-attf-href в a, поэтому следуйте этому коду, т.е.

<li><a t-attf-href="/web/session/logout?redirect=/web/login" title="Logout"><i class="fa fa-sign-out iconsize"></i></a></li>

Спасибо

person Debasish    schedule 09.07.2016