django后台数据批量导入

django后台数据批量导入

开发环境:win10+python3.6+django2.0

大致思路:客户端下载excel模板,按照模板填写数据,填写完之后上传,批量导入

为了确保数据能够上传成功,我们需要让客户端按照我们的格式来进行填写,避免字段不同 上传数据不成功,所以先要让客户下载模板,然后导入

这里使用的是django的excel包,还有其他的可以使用,比如:xlrd,有时间再写xlrd文档

具体步骤:

  1. 安装依赖

  2. 配置环境

  3. 注册视图

  4. 配置url

  5. 测试

1、安装依赖
pip3 install django-excel
pip3 install pyexcel-xls
pip3 install pyexcel-xlsx
2、配置环境

在项目setting.py中配置环境 这里配置的是我们文件上传下载需要的

FILE_UPLOAD_HANDLERS = (
    "django_excel.ExcelMemoryFileUploadHandler",
    "django_excel.TemporaryExcelFileUploadHandler",
)
3、注册视图

这是项目文件夹下面的view.py文件,你需要在哪里 使用就把文件放在哪个视图就行

from django.http import HttpResponseBadRequest
from django.views.generic import View
from django import forms
import django_excel as excel

#这是验证from提交的表单
class UploadFileForm(forms.Form):
    file = forms.FileField()

#这是测试文件上传
class TestDjangoExcelUpload(View):
    """测试使用django-excel上传文件"""
#如果是get请求就执行这里 
    def get(self,request):
        form = UploadFileForm()
        return render(request,'upload_form.html',context={ 'form': form })
#如果是post请求就之执行这里
    def post(self,request):
    #获取我们上传的文件
        form = UploadFileForm(request.POST, request.FILES)
        #验证文件
        if form.is_valid():
            filehandle = request.FILES['file']
            # return excel.make_response(filehandle.get_sheet(), "xlsx")
            #如果验证成功 返回给前端
            return HttpResponse({'msg':'成功'},filehandle)
        else:
            return HttpResponseBadRequest()

#测试文件下载
class TestDjangoExcelDownload(View):
    """测试使用django-excel下载文件"""

    def get(self,*args,**kwargs):
        sheet = excel.pe.Sheet([['姓名', '班级','年级','身份证号']])
        return excel.make_response(sheet, "xlsx")


def uploadGrade(request):
    '''
    班级信息导入
    :param request:
    :return:
    '''
    if request.method == 'POST':
        f = request.FILES.get('file')
        excel_type = f.name.split('.')[1]
        if excel_type in ['xlsx','xls']:
            # 开始解析上传的excel表格
            wb = xlrd.open_workbook(filename=None,file_contents=f.read())
            table = wb.sheets()[0]
            rows = table.nrows  # 总行数
            try:
                with transaction.atomic():  # 控制数据库事务交易
                    for i in range(1,rows):
                        rowVlaues = table.row_values(i)
                        print(rowVlaues[0])
                        print(rowVlaues[1])
                        print(rowVlaues[2])
                        print(rowVlaues[3])
                        # u_id_number = StudentsCost.objects.filter(rowVlaues[3])
                        # if u_id_number:
                        StudentsCost.objects.create(name=rowVlaues[0],grade=rowVlaues[1],the_class=rowVlaues[2],id_number=rowVlaues[3])

            except:
                logger.error('解析excel文件或者数据插入错误')
            return render(request,'t2.html',{'message':'导入成功'})
        else:
            logger.error('上传文件类型错误!')
            return render(request,'t1.html',{'message':'导入失败'})


from xadmin.views import CommAdminView

class TestView(CommAdminView):
    def get(self, request):
        context = super().get_context()     # 这一步是关键,必须super一下继承CommAdminView里面的context,不然侧栏没有对应数据
        title = "学生表"     #定义面包屑变量
        context["title"] = title   #把面包屑变量添加到context里面
        return render(request, 'excel.html', context)   #最后指定自定义的template模板,并返回context

class DownloadView(CommAdminView):
    """测试使用django-excel下载文件"""
    def get(self,*args,**kwargs):
        sheet = excel.pe.Sheet([['姓名', '班级','年级','身份证号']])
        return excel.make_response(sheet, "xlsx")
4、url配置

我这里演示是配置在项目url下面

url('xadmin/upload/uploadGrade', views.uploadGrade),

常用开发软件百度网盘地址

软件开发常用工具百度网盘

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值