用于电子表格(xlsx)文件的django rest framework呈现程序。
drf-renderer-xlsx的Python项目详细描述
django rest framework渲染器:xlsx
drf-renderer-xlsx
为django rest框架提供xlsx呈现程序。它使用openpyxl创建电子表格并返回数据。
要求
它可能适用于早期版本,但已通过以下测试:
- python=3.6
- django>;=1.11
- django rest framework=3.6
- openpyxl>;=2.4
安装
pip install drf-renderer-xlsx
然后将以下内容添加到您的REST_FRAMEWORK
设置中:
REST_FRAMEWORK={...'DEFAULT_RENDERER_CLASSES':('rest_framework.renderers.JSONRenderer','rest_framework.renderers.BrowsableAPIRenderer','drf_renderer_xlsx.renderers.XLSXRenderer',),}<>为了避免文件流没有文件名(浏览器经常会默认文件名)“下载”,没有扩展名,我们需要使用MIXIN来覆盖^ {< CD3>}头。如果未提供
filename
,则默认为export.xlsx
。例如:fromrest_framework.viewsetsimportReadOnlyModelViewSetfromdrf_renderer_xlsx.mixinsimportXLSXFileMixinfromdrf_renderer_xlsx.renderersimportXLSXRendererfrom.modelsimportMyExampleModelfrom.serializersimportMyExampleSerializerclassMyExampleViewSet(XLSXFileMixin,ReadOnlyModelViewSet):queryset=MyExampleModel.objects.all()serializer_class=MyExampleSerializerrenderer_classes=(XLSXRenderer,)filename='my_export.xlsx'
配置样式
样式可以从视图属性header
、column_header
、body
添加到工作表标题、列标题行和正文行。来自the openpyxl library的任何参数都可以用于字体、对齐、填充和边框(边框始终是单元格的所有边)。
classMyExampleViewSet(XLSXFileMixin,ReadOnlyModelViewSet):queryset=MyExampleModel.objects.all()serializer_class=MyExampleSerializerrenderer_classes=(XLSXRenderer,)column_header={'titles':["Column_1_name","Column_2_name","Column_3_name",],'column_width':[17,30,17],'height':25,'style':{'fill':{'fill_type':'solid','start_color':'FFCCFFCC',},'alignment':{'horizontal':'center','vertical':'center','wrapText':True,'shrink_to_fit':True,},'border_side':{'border_style':'thin','color':'FF000000',},'font':{'name':'Arial','size':14,'bold':True,'color':'FF000000',},},}body={'style':{'fill':{'fill_type':'solid','start_color':'FFCCFFCC',},'alignment':{'horizontal':'center','vertical':'center','wrapText':True,'shrink_to_fit':True,},'border_side':{'border_style':'thin','color':'FF000000',},'font':{'name':'Arial','size':14,'bold':False,'color':'FF000000',}},'height':40,}
还可以在方法get_body
、get_header
、get_column_header
中动态生成样式属性。
defget_header(self):starttime,endtime=parse_times(request=self.request)datetime_format="%H:%M:%S %d.%m.%Y"return{'tab_title':'MyReport','header_title':'Report from {} to {}'.format(starttime.strftime(datetime_format),endtime.strftime(datetime_format),),'height':45,'img':'app/images/MyLogo.png','style':{'fill':{'fill_type':'solid','start_color':'FFFFFFFF',},'alignment':{'horizontal':'center','vertical':'center','wrapText':True,'shrink_to_fit':True,},'border_side':{'border_style':'thin','color':'FF000000',},'font':{'name':'Arial','size':16,'bold':True,'color':'FF000000',}}}
也可以将color
字段添加到序列化程序并填充正文行。
classExampleSerializer(serializers.Serializer):color=serializers.SerializerMethodField()defget_color(self,instance):color_map={'w':'FFFFFFCC','a':'FFFFCCCC'}returncolor_map.get(instance.alarm_level,'FFFFFFFF')
发行说明
0.3.3
- 添加对嵌套数组的支持,将它们展平为字符串:
value1, value2, value3
,等等。
0.3.2
- 添加对嵌套值的支持;将子值展平到
sub.value1, sub.value2, sub.value3
等中。
0.3.1
- 修复从终结点返回空结果集时的错误。现在,它可以正确地下载一个空的电子表格。
- 删除一个错误的
format()
函数,该函数正在从电子表格中删除键入内容。
0.3.0
- 添加对自定义电子表格样式的支持(谢谢,pavel bryantsev!)
- 为每个视图添加一个用于设置下载文件名而不是
export.xlsx
的属性。
维护人员
这个包裹由Wharton Research Data Services的职员保管。我们很高兴The Wharton School允许我们有一定的时间为开源项目做出贡献。我们会根据项目的需要添加功能,并尽可能地跟上问题和拉取请求。由于时间的限制(我们的全职工作!),没有pull请求的功能请求可能无法实现,但我们始终乐于接受新的想法,并感谢贡献和我们的包用户。