Развертывание
Примеры |
Полный код примера можно найти на GitHub по данной ссылке.
|
Для использования генератора отчетов достаточно установить пакет stimulsoft-reports либо stimulsoft-dashboards при помощи установщика пакетов, выполнив следующую команду:
console |
python -m pip install stimulsoft-reports
|
console |
python -m pip install stimulsoft-dashboards
|
Будет установлена последняя доступная версия генератора отчетов в текущее рабочее пространство, после этого можно использовать классы и функции по работе с отчетами.
По умолчанию устанавливается минимальный набор драйверов данных. Необходимые драйверы можно дополнительно установить вручную, либо воспользоваться командой для установки всех доступных драйверов:
console |
python -m pip install stimulsoft-reports[ext]
|
console |
python -m pip install stimulsoft-dashboards[ext]
|
Информация |
Для примеров кода использован Flask фреймворк, как один из самых популярных и простых для понимания кода. Допускается использовать любой Web фреймворк, т.к. все классы и функции для работы с генератором отчетов являются полностью независимыми.
|
Для работы с генератором отчетов в Web проекте, предназначен класс StiReport. При помощи данного класса, можно создать отчет, загрузить отчет из файла либо строки, построить отчет, вызвать экспорт отчета. Например, требуется загрузить отчет из файла и выполнить его построение и экспортирование в HTML формат на стороне клиента:
app.py |
from flask import Flask, render_template, url_for, request from stimulsoft_reports.report import StiReport from stimulsoft_reports.report.enums import StiExportFormat
app = Flask(__name__)
@app.route('/report', methods = ['GET', 'POST']) def report(): report = StiReport() if report.processRequest(request): return report.getFrameworkResponse()
report.loadFile(url_for('static', filename='reports/SimpleList.mrt')) report.render() report.exportDocument(StiExportFormat.HTML)
js = report.javascript.getHtml() html = report.getHtml() return render_template('report.html', reportJavaScript = js, reportHtml = html) |
|
report.html |
<!DOCTYPE html> <html>
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Render and Export a Report</title>
{{ reportJavaScript|safe }} </head>
<body> {{ reportHtml|safe }} </body>
</html>
|
В этом примере последовательно выполняются следующие действия:
• | создается экземпляр объекта StiReport; |
• | выполняется обработка текущего запроса; |
• | выполняется загрузка шаблона отчета из файла SipmleList.mrt, расположенного в директории статических файлов; |
• | вызывается команда построения и экспортирования отчета; |
• | генерируется JavaScript и HTML код для работы с генератором отчетов, который передается в HTML шаблон. |
Специальная функция report.processRequest(request) выполняет обработку текущего запроса, и если она возвращает True, значит запрос предназначен для генератора отчетов (например чтение базы данных, вызов события), то вместо шаблона страницы необходимо вернуть результат его выполнения. Более подробно про это рассказано в разделе Обработчик событий.
Для генерации JavaScript и HTML кода компонентов, необходимых для работы генератора отчетов, используются два основных метода: report.javascript.getHtml() генерирует HTML код для подключения необходимых ресурсов генератора, report.getHtml() генерирует HTML код для работы с самим генератором отчетов. Сгенерированный HTML код передается в качестве параметров в HTML шаблон report.html, в котором выводится в необходимых местах.
Информация |
Наши продукты Stimulsoft Reports.PYTHON и Stimulsoft Dashboards.PYTHON не имеют нативного ядра генератора отчетов на Python, построение и экспорт отчета выполняется при помощи JavaScript кода на стороне клиента, либо на стороне сервера с использованием платформы Node.js. Поэтому, при использовании Python кода для работы с компонентами, необходимо вызвать функцию getHtml(), которая вернет весь необходимый JavaScript код для добавления на Web страницу. При использовании платформы Node.js, указанные методы будут вызваны автоматически внутри обработчика.
|
Поддержка фреймворков
В данный момент реализована встроенная поддержка для трех основных фреймворков для Python - это Flask, Django и Tornado. Также доступны универсальные функции для работы в любых других фреймворках. Для примеров кода использован Flask фреймворк, как один из самых популярных и простых для понимания кода, развертывание продукта для него было рассмотрено выше. Ниже представлены примеры этого же кода для остальных фреймворков. Все они очень похожи и отличаются только функциями, используемыми для конкретного фреймворка.
Django
app.py |
from django.shortcuts import render from django.templatetags.static import static from stimulsoft_reports.report import StiReport from stimulsoft_reports.report.enums import StiExportFormat
def report(request): report = StiReport() if report.processRequest(request): return report.getFrameworkResponse()
report.loadFile(static('reports/SimpleList.mrt')) report.render() report.exportDocument(StiExportFormat.HTML)
js = report.javascript.getHtml() html = report.getHtml() return render(request, 'report.html', {'reportJavaScript': js, 'reportHtml': html})
|
report.html |
<!DOCTYPE html> <html>
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Render and Export a Report</title>
{{ reportJavaScript|safe }} </head>
<body> {{ reportHtml|safe }} </body>
</html>
|
Tornado
app.py |
import asyncio, os from tornado.web import Application, RequestHandler, url from stimulsoft_reports.report import StiReport from stimulsoft_reports.report.enums import StiExportFormat
class ReportHandler(RequestHandler): def get(self): report = StiReport() if report.processRequest(request): return report.getFrameworkResponse(self)
report.loadFile(self.static_url('reports/SimpleList.mrt')) report.render() report.exportDocument(StiExportFormat.HTML)
js = report.javascript.getHtml() html = report.getHtml() self.render('report.html', reportJavaScript = js, reportHtml = html)
def post(self): handler = StiHandler() if handler.processRequest(self.request): return handler.getFrameworkResponse(self)
|
report.html |
<!DOCTYPE html> <html>
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Render and Export a Report</title>
{% raw reportJavaScript %} </head>
<body> {% raw reportHtml %} </body>
</html>
|
Универсальные функции
app.py |
from stimulsoft_reports.report import StiReport from stimulsoft_reports.report.enums import StiExportFormat
def report(): report = StiReport() query = 'query string' body = 'post data' if report.processRequest(None, query, body): response = report.getResponse() data = response.data contentType = response.contentType mimetype = response.mimetype
report.loadFile(url_for('static', filename='reports/SimpleList.mrt')) report.render() report.exportDocument(StiExportFormat.HTML)
js = report.javascript.getHtml() html = report.getHtml()
|
Информация |
В большинстве случаев для работы с продуктом достаточно использовать только Python код, который обеспечивает взаимодействие со всеми основными возможностями. Для более детальной настройки продукта и использования всех возможностей JS генератора, необходимо использовать JavaScript код. Вариант развертывания продукта при помощи только JavaScript кода описан в разделе Reports and Dashboards for JS, в этом случае использование Python кода требуется только для подключения адаптеров данных.
|
Различные варианты развертывания и оптимизации рассмотрены в разделе Уменьшение времени загрузки скриптов.