mirror of
https://github.com/jumpserver/jumpserver.git
synced 2026-05-17 04:45:37 +00:00
* feat: Add report export * perf: Add report export translation * feat: Add password change log report export functionality * feat: Add operate log report export functionality * feat: Add job audit report export functionality * feat: Add job log audit report export functionality * feat: Add ticket report export functionality * feat: Add session report export functionality * feat: Add FTP log report export functionality * feat: Update and add report-related translations --------- Co-authored-by: wangruidong <940853815@qq.com>
43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
from django.conf import settings
|
|
|
|
__all__ = ['ReportExportMixin']
|
|
|
|
|
|
class ReportExportMixin:
|
|
report_export_mode_param = 'export_mode'
|
|
report_export_mode_value = 'report'
|
|
report_exporter_class = None
|
|
|
|
def get_report_exporter_class(self):
|
|
return getattr(self, 'report_exporter_class', None)
|
|
|
|
def should_export_report(self):
|
|
exporter_class = self.get_report_exporter_class()
|
|
if not exporter_class:
|
|
return False
|
|
if getattr(self, 'action', None) != 'list':
|
|
return False
|
|
if self.request.query_params.get('format') != 'xlsx':
|
|
return False
|
|
return self.request.query_params.get(self.report_export_mode_param) == self.report_export_mode_value
|
|
|
|
def get_report_export_queryset(self, queryset):
|
|
try:
|
|
return queryset[:settings.MAX_LIMIT_PER_PAGE]
|
|
except TypeError:
|
|
return list(queryset)[:settings.MAX_LIMIT_PER_PAGE]
|
|
|
|
def export_report_response(self, request, *args, **kwargs):
|
|
queryset = self.filter_queryset(self.get_queryset())
|
|
queryset = self.get_report_export_queryset(queryset)
|
|
exporter_class = self.get_report_exporter_class()
|
|
exporter = exporter_class(view=self, request=request, queryset=queryset)
|
|
response = exporter.get_response()
|
|
exporter.record_logs()
|
|
return response
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
if self.should_export_report():
|
|
return self.export_report_response(request, *args, **kwargs)
|
|
return super().list(request, *args, **kwargs)
|