阅读本文大概需要6分钟 在上一篇文章,我介绍了CSV是什么?CSV有哪些优点?如何使用等等?并且最后我们用一个例子简单讲解了如何使用Python模块CSV进行导出后缀为.csv的文本文件。 具体文章参看:Python模块之CSV导出(一) 其实例子用于异步导出数据文件是够了,但工作中我们可能还需要结合我们Web框架进行更复杂的CSV导出。 所以今天我们的目的就是结合Python Django框架进行分享CSV导出的另外一种方式。 安装依赖这里面我们需要安装一个第三方包
有些同学可能不太明白,明明是Django框架怎么和Django REST Framework(简称DRF)扯上关系了,简单解释一下,由于我们Django API开发常常配合DRF进行,所以一般都是一起安装使用了的,把Django和DRF结合起来整个RESTFul API开发效率能大大提高,建议稍微大一点工程化项目都去使用DRF。 使用使用方式如下:
看起来是不是简单方便,确实就是这么简单,下面我们看一个例子。 例子废话不多说,直接上代码,先定义一个自己的CSV Render # 定义CSV Renderfrom rest_framework_csv import renderersclass YourModelRender(renderers.CSVStreamingRenderer): header = [ 'phone', 'remark', 'create_time', ] labels = dict([ ('phone', u'联系电话'), ('remark', u'备注'), ('create_time', u'时间'), ]) 这里使用label dict属性将自定义标签应用于CSVRenderer,其中每个键对应于表头header,值对应于该表头header的自定义标签,这样我们各个值就能和header对应起来。 Django导出的view方法,源码如下。
上面几行代码是不是看起来很简单,确实就是这么简单,简单的背后是rest_framework_csv帮我们做了导出功能,底层实现还是昨天我说的那种方式write,writerow的方式。 这里面简单解释一下:
其他上面我们使用DRF,并且也用了看起来复杂的YourModelListSerializer这种复杂的概念,主要目的是让大家知道DRF的方式,至于普通使用Django其实我们完全可以把 关于CSV我们还可以用Django模板形式进行,和我们用rest_framework_csv模块思路差不多 csv_data = ( ('First row', 'Foo', 'Bar', 'Baz'), ('Second row', 'A', 'B', 'C', ''Testing'', 'Here's a quote'), ) t = loader.get_template('my_template_name.txt') # 定义模板代码 c = Context({ 'data': csv_data, })response.write(t.render(c))return response 虽然思路相似,但过程实现会麻烦较多,你要去切换模板代码书写,渲染,不推荐这种方式。 最后关于CSV我们就介绍到这里,结合上一篇主要两种方式:
原理都是Python内置模块CSV的一些变换,只是结合第三库,让我们操作更快更方便起来。 |
|