其实这个东西跟restframework没有卵关系,顺便写在这里

Django REST framework的各种技巧【目录索引】

导入导出在cms中是一个非常常用的功能,思考做成通用的东西,最终选择django-import-export,虽然这玩意儿最初是想放在admin中用的,虽然用起来很繁琐,但是可以做成通用的东西,而且用起来比较像rest的serializer。

django-import-export==0.4.2 文档

需要看的源码 cd 你的virtualenv/local/lib/python2.7/site-packages/import_export

resources.py instance_loaders.py

先看用法

通过view可以看到,代码在这里是很干净的,跟一个正常的restframework的api没有什么区别。

class SchoolExportView(ExportMixin, GenericAPIView):serializer_class = SchoolSerializerpermission_classes = (IsAuthenticated, ModulePermission)queryset = School.objects.filter(is_active=True).order_by('-id')resource_class = SchoolResourcefilter_backends = (filters.DjangoFilterBackend, filters.SearchFilter)filter_class = SchoolFiltersearch_fields = ('name', 'contact')module_perms = ['school.school']class SchoolImportView(ImportMixin, GenericAPIView):serializer_class = SchoolSerializerpermission_classes = (IsAuthenticated, ModulePermission)queryset = School.objects.filter(is_active=True).order_by('-id')resource_class = SchoolResourcemodule_perms = ['school.school']

Mixin

class ExportMixin(object):@GET('filename', type='string', default='download.xls')@GET('format', type='string', default='xls', validators='in: xls,xlsx')@GET('empty', type='bool', default=False)def get(self, request, format, filename, empty):queryset = Noneif not empty:queryset = self.filter_queryset(self.get_queryset())resourse = self.resource_class()export_data = resourse.export(queryset, empty)return attachment_response(getattr(export_data, format), filename=filename)class ImportMixin(object):@POST('file', validators='required')def post(self, request, file):import_file = request.FILES['file']resource = self.resource_class()extra_data = {} if not hasattr(self, 'get_resoucre_extra_data') else self.get_resoucre_extra_data()resource.set_extra_data(extra_data)dataset = resource.get_dataset(import_file)result = resource.import_data(dataset, use_transactions=True, raise_errors=True)return Response()

重点是实现Resource, 先说export

export非常简单,因此先说export,先看demo(仅仅写export)

# -*- coding: utf-8 -*-
from __future__ import absolute_import
from import_export import resources
from school.models import School
class SchoolResource(resources.ModelResource):def dehydrate_category(self, school):if school.category == School.MIDDLE_SCHOOL:return u'中学'elif school.category == School.COLLEGE:return u'高校'return ''def get_export_headers(self):return [u'分类', u'省份', u'城市', u'学校', u'地址', u'联系人',u'职务', u'联系电话', u'邮箱']class Meta:model = Schoolfields = ('category', 'cit

Django REST framework的各种技巧——7.导入导出相关推荐

  1. Django REST framework的各种技巧——1.基础讲解

    写在最上面的话 django是一个神奇的框架,而restframework又是遵循了这个框架的另一个神奇的框架,然而由于restframework的文档稀烂无比,很多时候你必须看源码才能写出科学的代码 ...

  2. Vue+Django REST framework打造生鲜电商项目

    1-1 课程导学 2-1 Pycharm的安装和简单使用 2-2 MySQL和Navicat的安装和使用 2-3 Windows和Linux下安装Python2和Python3 2-4 虚拟环境的安装 ...

  3. 源码剖析Django REST framework的认证方式及自定义认证

    源码剖析Django REST framework的认证方式 由Django的CBV模式流程,可以知道在url匹配完成后,会执行自定义的类中的as_view方法. 如果自定义的类中没有定义as_vie ...

  4. Django REST framework API开发

    REST 介绍 RESTful API 设计 实现API的两种方式 FBV 视图函数 urlpatterns = [url(r'^user/$', views.user),url(r'^user/ad ...

  5. django 部署_狂野的Django:部署生存的技巧

    django 部署 by Ali Alavi 通过Ali Alavi 狂野的Django:部署生存的技巧 (Django in the wild: tips for deployment surviv ...

  6. python全栈生鲜电商_Vue+Django REST framework 打造生鲜电商项目(学习笔记一)

    1.环境搭建 所需软件的版本: 1)pycharm(使用professional版本) 2)mysql.navicat 安装好的mysql后需要给root权限,不然只能通过localhost访问本地的 ...

  7. [转]Django REST framework 简介与中文教程

    Django REST framework 简介与中文教程 简介 在序列化与反序列化时,虽然操作的数据不尽相同,但是执行的过程却是相似的,也就是说这部分代码是可以复用简化编写的. 在开发REST AP ...

  8. Django REST Framework中的Serializer relations

    官方文档原文 Relational fields are used to represent model relationships. They can be applied to ForeignKe ...

  9. Django REST framework学习笔记

    文章目录 1. API接口开发 1.1 获取数据的接口 1.2 添加数据的接口 1.3 更新数据的接口 1.4 删除数据的接口 2. API字段的定制 2.1 别名字段 2.2 字段格式化 2.3 字 ...

  10. 7- vue django restful framework 打造生鲜超市 -商品类别数据展示(上)

    Vue+Django REST framework实战 搭建一个前后端分离的生鲜超市网站 Django rtf 完成 商品列表页 并没有将列表页的数据json 与前端的页面展示结合起来 讲解如果将dr ...

最新文章

  1. seaborn系列 (5) | 柱状图countplot()
  2. 【BZOJ】3390: [Usaco2004 Dec]Bad Cowtractors牛的报复(kruskal)
  3. 【Android工具】好软件推荐,安卓手机免费好用的SSH客户端——JuiceSSH
  4. bgi::detail::minmaxdist用法的测试程序
  5. void Update ( ) 更新 void FixedUpdate ( )
  6. 政府公开数据可视化_公开演讲如何帮助您设计更好的数据可视化
  7. [导入]在C++ Builder3下实现程序自动运行的方法
  8. mysql里面有没有map类型_MySQL学习(二) 数据类型
  9. 分析称地图服务将成移动行业未来
  10. 微服务 注册中心的作用_SpringCloud(二)服务注册中心与Eureka工作原理介绍
  11. jquery 获取指定元素
  12. BZOJ3190[JLOI2013] 赛车
  13. 【Spark ML】第 3 章:监督学习
  14. H5网页实现录音并转换为文字
  15. 图论(五)单源最短路算法
  16. 简单综合案例的统计学方法(总结试验性定量数据分析)
  17. 时序数据库QuestDB和TimescaleDB对比
  18. 测绘 绘图 计算机,20 机械测绘与计算机绘图 草图绘制范例 课件:草图绘制范例.pptx...
  19. 导入的java文件不显示文字_java 引入自定义字体font后出现的硬盘吃光的问题
  20. linux rm、rm -f、rm -r的区别

热门文章

  1. 不完全的 Excel 2016 for Windows与 Excel 2016 for Mac比较
  2. wmo(wow map object) research
  3. 远离“垃圾人” (Stay away from Trash people)
  4. 走进BYOD移动办公
  5. java巡逻_scau 1142 巡逻的士兵(分治)
  6. VScode Acquiring lock on flock: 99: No locks available 不断retry 解决方案
  7. 2020年学习PS平面设计这4个小技巧你一定要牢记
  8. CRM系统如何抓住潜在商机?
  9. PPT中滚动字幕的制作及与音乐同步的技巧
  10. 超硬核总结,一举拿下Redis数据库