Коллеги, привет! Сегодня расскажу, какой должен быть синтаксис скрипта и настройки сервера для стабильной работы мэшапа Qlik Sense в связке с предикативной аналитикой Python, особенно в части обеспечения стабильной работы jQuery (с использованием обращения Ajax), когда разработчики пытаются создать двустороннюю связь между мэшапом и Python. Двусторонняя связь в этой статье означает создание запроса POST, который получает приложение на Python, а ответ возвращается обратно мэшапу.

Qlik Sense + Python: описание задачи

Частая задача для разработчика – работать с разными системами и обеспечить их интеграцию, например Python на Linux или Windows, DevOps и инструменты Continues Integration (CI). Так бывает, что тестовые случаи CI запускаются в Python, а менеджмент хочет видеть информацию по итогам этих тестирований. Итак, как обеспечить связь мэшапа и приложения Python (файла *.py, который хранится на сервере, локально на жестком диске или на другом сервере)? Далее расскажу, как решить эту задачу: настроить Qlik Sense Server, IIS, файл Python и мэшап Qlik Sense. Мы сильно зависим от обращений Ajax для выполнения этой задачи. Хотя для решения этой задачи можно использовать и возможности API.

Qlik Sense + Python: решение задачи

Предложенное решение может использоваться и для других задач, но для настройки двусторонней связи между мэшапом Qlik Sense и Python нам нужно сделать следующие настройки и соблюсти некоторые системные требования:

  1. Windows 10.
  2. Установленный IIS и запущенный на машине с Windows 10 от имени администратора.
  3. Установленный Python на машине с Windows 10 (предложенное решение протестировано с 2.7).
  4. Установленный Qlik Sense Server 3.2 на отдельную машину.
  5. В Qlik Management Console (QMC) создайте новый виртуальный proxy-сервер со следующими параметрами:
    1. Название: Python (по желанию).
    2. Префикс: py, (назвать можно как вам угодно).
    3. Имя заголовка сессии cookie: X-Qlik-Session-py (назвать можно как вам угодно).
    4. Аутентификация, Режим анонимного пользователя: нет анонимного пользователя.
    5. Метод аутентификации: Ticket.
    6. Шаблон проверки подлинности Windows: Windows. Вы можете выбрать другой шаблон.
    7. Если вы работаете с техникой CORS, в продвинутых настройках задайте Additional response headers: Access-Control-Allow-Origin: xyz. Где xyz нужно заменить на имя домена с вашим мэшапом. При этом в QMC не нужно указывать http или https и .com или .net, то есть пишем только доменное именно без указания зоны домена и http.

НА ЗАМЕТКУ! Cross-Origin Resource Sharing (CORS) является техникой для ослабления правила одного источника, позволяя JavaScript на web странице обрабатывать ответ от REST API от другого источника.

  1. Далее перейдем к работе с мэшапом, который создан в Qlik Sense dev-hub и перемещен с сервера Qlik Sense в IIS. Структура папок IIS у меня выглядит следующим образом:
    1. mashup-python.css,
    2. mashup-python.html,
    3. mashup-python.js, c
    4. myStyle.css,
    5. PythonApp.py,
    6. web.config
  2. Мэшап запускается с IIS как сайт на машине с Windows 10 с поддержкой протокола HTTPS, поэтому на сайте должен быть обязательно SSL-сертификат//
    var app = qlik.openApp(‘59201a52-2319-4f7a-a21b-0ae0307cd70e’, config);Так, нужно привязать сайт к HTTPS. В действиях выберите Привязать и выберите HTTPS и порт 443. Далее нужно выбрать SSL-сертификат. Это будет ваш сертификат Qlik Sense Server, установленный на IIS с использованием MMC.
  3. Включите поддержку CGI/Python для сайта с мэшапом. Для этого добавьте новый сайт. Выберите сайт и щёлкните по нему два раза мышкой Сопоставление обработчиков (Handler Mapping) в настройках IIS.

CGI option.png

  1. У меня Widows 10 и сервер Qlik Sense 3.2 находятся в той же локальной сети.
  2. Для корректной работы IIS я добавил \IIS_IUSRS в дополнен7ие к группе IUSR или именам пользователей к разрешениям сайта.
  3. Здесь я не описываю как подключить через Single Sing On, поэтому после запуска мэшапа из IIS, войдите в ваш хаб с другой вкладке в браузере, чтобы создалась новая сессия и вы избежали такой ошибки this GEThttps://10.76.198.57/py/resources/assets/external/requirejs/require.js net::ERR_INSECURE_RESPONSE  Так появится такое окно:Qlik_Sense_Mashup Login.png
  4. После входа, будет создан тикет Qlik Sense, и вы увидите вот такую вкладку, это загрузился файл RequireJS:requirejs_require_qlikTicke.png  

Прежде чем выполнить запрос Ajax к Python, мэшап будет выглядеть так:

Qlik_Sense_Mashup before.png

После нажатия на кнопку “Click me”, вы получите ответ Python, тогда мэшап примет вид:

Qlik_Sense_Mashup After.png  

Основная часть коды выглядит так:

 

HTML (важно)

 

 

JavaScript (обращение Ajax)

 

Python (создание ответа в заголовке)

  1. sys.stdout.write(json.dumps(result, indent=1)) # Encoding JASON hierarchies
  2. sys.stdout.write(“\n”)
  3. sys.stdout.close()

 

Скачать архив с файлами вы можете по ссылке.

На этом все на сегодня. Отличных вам разработок с Qlik!

 

Источник: составлено на основе статей на Qlik Community и официального руководства пользователя Qlik Sense