用于电子表格(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'

配置样式

样式可以从视图属性headercolumn_headerbody添加到工作表标题、列标题行和正文行。来自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_bodyget_headerget_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请求的功能请求可能无法实现,但我们始终乐于接受新的想法,并感谢贡献和我们的包用户。

投稿人(谢谢!)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在SeleniumWebDriver上同时断言或验证多个必需的错误消息   来自改型回调响应的java Android令牌   使用Play框架或插件进行java Live页面更新   java对象和字符串的相等性和内存digram   java Android在运行异步任务之间交换数据   如何连接到websocket并用Java发送消息   java访问可执行JAR中的文件和文件夹   java应用程序正在强制关闭(Admob)?   强制类型参数在java泛型中实现特定方法   java使用流API比较两个集合中的对象、查找相等对象和更改对象属性的最佳方法是什么   爪哇泰坦工厂。open()配置   java拉git子模块使用maven exec插件,而exec mvn部署   在Android中使用volley库注册java用户