Django REST framework的各种技巧——7.导入导出
其实这个东西跟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.导入导出相关推荐
- Django REST framework的各种技巧——1.基础讲解
写在最上面的话 django是一个神奇的框架,而restframework又是遵循了这个框架的另一个神奇的框架,然而由于restframework的文档稀烂无比,很多时候你必须看源码才能写出科学的代码 ...
- Vue+Django REST framework打造生鲜电商项目
1-1 课程导学 2-1 Pycharm的安装和简单使用 2-2 MySQL和Navicat的安装和使用 2-3 Windows和Linux下安装Python2和Python3 2-4 虚拟环境的安装 ...
- 源码剖析Django REST framework的认证方式及自定义认证
源码剖析Django REST framework的认证方式 由Django的CBV模式流程,可以知道在url匹配完成后,会执行自定义的类中的as_view方法. 如果自定义的类中没有定义as_vie ...
- Django REST framework API开发
REST 介绍 RESTful API 设计 实现API的两种方式 FBV 视图函数 urlpatterns = [url(r'^user/$', views.user),url(r'^user/ad ...
- django 部署_狂野的Django:部署生存的技巧
django 部署 by Ali Alavi 通过Ali Alavi 狂野的Django:部署生存的技巧 (Django in the wild: tips for deployment surviv ...
- python全栈生鲜电商_Vue+Django REST framework 打造生鲜电商项目(学习笔记一)
1.环境搭建 所需软件的版本: 1)pycharm(使用professional版本) 2)mysql.navicat 安装好的mysql后需要给root权限,不然只能通过localhost访问本地的 ...
- [转]Django REST framework 简介与中文教程
Django REST framework 简介与中文教程 简介 在序列化与反序列化时,虽然操作的数据不尽相同,但是执行的过程却是相似的,也就是说这部分代码是可以复用简化编写的. 在开发REST AP ...
- Django REST Framework中的Serializer relations
官方文档原文 Relational fields are used to represent model relationships. They can be applied to ForeignKe ...
- Django REST framework学习笔记
文章目录 1. API接口开发 1.1 获取数据的接口 1.2 添加数据的接口 1.3 更新数据的接口 1.4 删除数据的接口 2. API字段的定制 2.1 别名字段 2.2 字段格式化 2.3 字 ...
- 7- vue django restful framework 打造生鲜超市 -商品类别数据展示(上)
Vue+Django REST framework实战 搭建一个前后端分离的生鲜超市网站 Django rtf 完成 商品列表页 并没有将列表页的数据json 与前端的页面展示结合起来 讲解如果将dr ...
最新文章
- seaborn系列 (5) | 柱状图countplot()
- 【BZOJ】3390: [Usaco2004 Dec]Bad Cowtractors牛的报复(kruskal)
- 【Android工具】好软件推荐,安卓手机免费好用的SSH客户端——JuiceSSH
- bgi::detail::minmaxdist用法的测试程序
- void Update ( ) 更新 void FixedUpdate ( )
- 政府公开数据可视化_公开演讲如何帮助您设计更好的数据可视化
- [导入]在C++ Builder3下实现程序自动运行的方法
- mysql里面有没有map类型_MySQL学习(二) 数据类型
- 分析称地图服务将成移动行业未来
- 微服务 注册中心的作用_SpringCloud(二)服务注册中心与Eureka工作原理介绍
- jquery 获取指定元素
- BZOJ3190[JLOI2013] 赛车
- 【Spark ML】第 3 章:监督学习
- H5网页实现录音并转换为文字
- 图论(五)单源最短路算法
- 简单综合案例的统计学方法(总结试验性定量数据分析)
- 时序数据库QuestDB和TimescaleDB对比
- 测绘 绘图 计算机,20 机械测绘与计算机绘图 草图绘制范例 课件:草图绘制范例.pptx...
- 导入的java文件不显示文字_java 引入自定义字体font后出现的硬盘吃光的问题
- linux rm、rm -f、rm -r的区别
热门文章
- 不完全的 Excel 2016 for Windows与 Excel 2016 for Mac比较
- wmo(wow map object) research
- 远离“垃圾人” (Stay away from Trash people)
- 走进BYOD移动办公
- java巡逻_scau 1142 巡逻的士兵(分治)
- VScode Acquiring lock on flock: 99: No locks available 不断retry 解决方案
- 2020年学习PS平面设计这4个小技巧你一定要牢记
- CRM系统如何抓住潜在商机?
- PPT中滚动字幕的制作及与音乐同步的技巧
- 超硬核总结,一举拿下Redis数据库