马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在已有的django drf项目中创建一个用于报表天生的 Django DRF 应用,支持 Excel 和 PDF 格式的报表天生与导出功能,可以分为几个步调来完成:
- 集整天生 Excel 和 PDF 的库:
- Excel:利用 openpyxl 或 xlsxwriter。
- PDF:利用 reportlab 或 weasyprint。
- 创建 API 端点:通过 DRF 提供 Excel 和 PDF 报表的下载接口。
一、安装必要的库
首先,安装所需的库:
- pip install openpyxl reportlab
复制代码 二、创建 Django App
假设我们创建一个名为 report 的应用,用于报表天生功能。
- python manage.py startapp report_app
复制代码 在 report 应用中创建报表天生逻辑。
三、实现报表天生功能
1. Excel 报表天生
利用 openpyxl 来天生 Excel 格式的报表。
- # report/utils.py
- from openpyxl import Workbook
- from io import BytesIO
- def generate_excel_report(data):
- wb = Workbook()
- ws = wb.active
- # 设置表头
- ws.append(["ID", "Name", "Amount"])
- # 填充数据
- for row in data:
- ws.append([row['id'], row['name'], row['amount']])
- # 保存为字节流
- byte_io = BytesIO()
- wb.save(byte_io)
- byte_io.seek(0)
- return byte_io
复制代码 2. PDF 报表天生
利用 reportlab 来天生 PDF 格式的报表。
- # report/utils.py
- from reportlab.lib.pagesizes import letter
- from reportlab.pdfgen import canvas
- from io import BytesIO
- def generate_pdf_report(data):
- buffer = BytesIO()
- c = canvas.Canvas(buffer, pagesize=letter)
- c.setFont("Helvetica", 12)
- y_position = 750
- # 写入表头
- c.drawString(100, y_position, "ID")
- c.drawString(200, y_position, "Name")
- c.drawString(300, y_position, "Amount")
- y_position -= 20
- # 写入数据
- for row in data:
- c.drawString(100, y_position, str(row['id']))
- c.drawString(200, y_position, row['name'])
- c.drawString(300, y_position, str(row['amount']))
- y_position -= 20
- # 保存为字节流
- c.save()
- buffer.seek(0)
- return buffer
复制代码 3. 创建 API 端点
在 report/views.py 中创建 API 端点来返回报表。
- # report/views.py
- from rest_framework.views import APIView
- from rest_framework.response import Response
- from rest_framework import status
- from rest_framework.permissions import IsAuthenticated
- from django.http import HttpResponse
- from .utils import generate_excel_report, generate_pdf_report
- class ReportGenerationView(APIView):
- permission_classes = [IsAuthenticated]
- def get(self, request, report_type):
- # 模拟数据,实际应用中可以从数据库中获取
- data = [
- {"id": 1, "name": "John", "amount": 100},
- {"id": 2, "name": "Jane", "amount": 200},
- {"id": 3, "name": "Doe", "amount": 300}
- ]
-
- if report_type == 'excel':
- file = generate_excel_report(data)
- response = HttpResponse(file, content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
- response['Content-Disposition'] = 'attachment; filename="report.xlsx"'
- return response
-
- elif report_type == 'pdf':
- file = generate_pdf_report(data)
- response = HttpResponse(file, content_type='application/pdf')
- response['Content-Disposition'] = 'attachment; filename="report.pdf"'
- return response
-
- return Response({"error": "Invalid report type"}, status=status.HTTP_400_BAD_REQUEST)
复制代码 4. 配置 URL 路由
在 report/urls.py 配置路由,将报表天生功能暴露为 API 端点。
- # report/urls.py
- from django.urls import path
- from .views import ReportGenerationView
- urlpatterns = [
- path('generate-report/<str:report_type>/', ReportGenerationView.as_view(), name='generate-report'),
- ]
复制代码 5. 注册 URL 路由
确保在主项目的 urls.py 中注册 report 应用的 URL。
- # project/urls.py
- from django.contrib import admin
- from django.urls import path, include
- urlpatterns = [
- path('admin/', admin.site.urls),
- path('report/', include('report.urls')),
- ]
复制代码 四、完成后端逻辑
如今,我们已经完成了以下功能:
- 报表天生的 API (/report/generate-report/excel/ 或 /report/generate-report/pdf/)。
- 支持 Excel 和 PDF 格式的报表天生与导出。
五、测试
启动 Django 项目并利用 API 哀求:
- GET /report/generate-report/excel/:下载 Excel 报表。
- GET /report/generate-report/pdf/:下载 PDF 报表。
六、扩展功能(可选)
- 分页支持:当数据量很大时,可以支持分页天生报表。
- 格式定制:根据需求,可以自界说报表的格式,如添加更多的表头、内容格式化等。
- 权限控制:根据用户权限,限制哪些用户可以下载报表。
这样就完成了一个基本的报表天生 Django DRF 应用,可以根据需要进一步扩展和优化。
源码
已在github开源
Django封装高复用高可移植的apps系列
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |