1. 功能叙述

  1. 前端web页面通过访问url+id的形式访问url
  2. lottery/draw/(?P<pk>(\d+))/download/
  3. 后端代码通过orm查询pk相关数据
  4. 过滤出自己想要的字段

2. 前端页面

  1. <a onclick="downloadFilebyAjax(this,'{{ period.id }}')" href="javascript:;" title="下载">
  2. <i class="layui-icon">&#xe601;</i>#下载图标
  3. </a>
  1. /*下载统计*/
  2. function downloadFilebyAjax(obj, id) {
  3. layer.confirm('确认要下载吗?', function (index) {
  4. $.ajaxSetup({
  5. data: {csrfmiddlewaretoken: '{{ csrf_token }}'}
  6. });
  7. $.ajax({
  8. type: "post",
  9. url: id + '/download/',
  10. dataType: "json",
  11. success: function (data) {
  12. if (data.status) {
  13. console.log(data.filePath, "文件下载中... ...");
  14. window.location.href = data.filePath;
  15. layer.msg(data.msg, {icon: 6, time: 1000});
  16. } else {
  17. layer.msg(data.msg, {icon: 5, time: 1000});
  18. }
  19. },
  20. error: function (data) {
  21. console.log("对不起,网络错误,请稍后重试或联系管理员");
  22. }
  23. });
  24. });
  25. }

3. 后端功能

  1. def download_draw(request,pk):
  2. if request.method =="POST":
  3. data = {'status':True,'msg': '下载成功','filePath':''}
  4. searia_list= huodong_models.SearialNum.objects.filter(period_id=pk)
  5. xls_name = searia_list[0].period.title+'.xls'
  6. xls_path =os.path.join(settings.BASE_DIR, 'static','download',xls_name)
  7. if os.path.exists(xls_path):
  8. os.remove(xls_path)
  9. book = xlwt.Workbook(encoding='utf-8')
  10. sheet = book.add_sheet(searia_list[0].period.title, cell_overwrite_ok=True)
  11. # 第0行写入标题
  12. sheet.write(0,0,'期号')
  13. sheet.write(0,1,'抽奖码')
  14. sheet.write(0,2,'会员账号')
  15. sheet.write(0,3,'获得奖品')
  16. sheet.write(0,4,'使用状态')
  17. # 初始行,写入数据从第一行开始写入
  18. line = 1
  19. manipulation(searia_list,line,sheet)
  20. book.save(xls_path)
  21. if os.path.exists(xls_path):
  22. filePath = '/static/download/%s' % xls_name
  23. data['filePath']=filePath
  24. else:
  25. data['status']=False
  26. data['msg']='下载失败'
  27. return JsonResponse(data)
  28. return HttpResponse('无效请求')
  1. def manipulation(searia_list,line,sheet):
  2. for searia in searia_list:
  3. vip_acount = ''
  4. prize = ''
  5. style = 0
  6. if searia.status == 1:
  7. vip_acount = searia.userinfo.vip_acount
  8. prize = searia.userinfo.prize
  9. style = 2
  10. sheet.write(line, 0, searia.period.period)
  11. sheet.write(line, 1, searia.searial)
  12. sheet.write(line, 2, vip_acount)
  13. sheet.write(line, 3, prize)
  14. sheet.write(line, 4, searia.get_status_display())
  15. line += 1

4. 说明代码思路

  1. 先初始化execl文件第0行标题名称
  2. 之后通过数据库取出的数据生成一个数据列表
  3. 初试行位第一行一次循环写入每条字段过滤的数据
  4. 初试行数以此累加
  5. 最后保存execl文件
  6. 然后将服务器的保存的地址返回给前端
  7. 通过window.location.href来进行访问实现下载

5.最后说明

  1. 该记录只是用于个人思路总结,
  2. 以及作为笔记,方便回忆

文件下载功能django+js的更多相关文章

  1. JAVA文件下载功能问题解决日志

    今天给报告系统做了个下载功能,遇到了挺多问题,通过查资料一一解决了. 1.首先遇到的问题是:java后台的输出流输出之后,没有任何报错,浏览器端不弹出保存文件的对话框,原本是ajax请求到后台的con ...

  2. 解决springmvc中文件下载功能中使用javax.servlet.ServletOutputStream out = response.getOutputStream();后运行出异常但结果正确的问题

    问题描述: 在springmvc中实现文件下载功能一般都会使用javax.servlet.ServletOutputStream out = response.getOutputStream();封装 ...

  3. ES6,ES2105核心功能一览,js新特性详解

    ES6,ES2105核心功能一览,js新特性详解 过去几年 JavaScript 发生了很大的变化.ES6(ECMAScript 6.ES2105)是 JavaScript 语言的新标准,2015 年 ...

  4. WebView实现文件下载功能

    WebView控制调用相应的WEB页面进行展示.安卓源码当碰到页面有下载链接的时候,点击上去是一点反应都没有的.原来是因为WebView默认没有开启文件下载的功能,如果要实现文件下载的功能,需要设置W ...

  5. Spring Boot实现文件下载功能

    我们只需要创建一个控制器(Controler)文件,即Controller目录下的File_Download.java,其完整目录如下: @Controller public class File_D ...

  6. Spring Boot入门(11)实现文件下载功能

      在这篇博客中,我们将展示如何在Spring Boot中实现文件的下载功能.   还是遵循笔者写博客的一贯风格,简单又不失详细,实用又能让你学会.   本次建立的Spring Boot项目的主要功能 ...

  7. ASP.NET网页中RAR、DOC、PDF等文件下载功能实例源代码

    以前做asp.net下载功能的时候都是采用:<a href="http://www.wang0214.com/wgcms">下载</a>的方式来实现下载. ...

  8. java web文件下载功能实现 (转)

    http://blog.csdn.net/longshengguoji/article/details/39433307 需求:实现一个具有文件下载功能的网页,主要下载压缩包和图片 两种实现方法: 一 ...

  9. 【Servlet】java web 文件下载功能实现

    需求:实现一个具有文件下载功能的网页,主要下载压缩包和图片 两种实现方法: 一:通过超链接实现下载 在HTML网页中,通过超链接链接到要下载的文件的地址 <!DOCTYPE html> & ...

随机推荐

  1. 团体程序设计天梯赛 L1-009. N个数求和

    易错题 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdboo ...

  2. php-fpm 重启 nginx单独配置 重启

    nginx单独配置 重启 [root@ssy106c14c190c69 Api]# cd /usr/local/nginx/sbin/[root@ssy106c14c190c69 sbin]# lsn ...

  3. Docker Macvlan

    参考博客:https://blog.csdn.net/daye5465/article/details/77412619 一.Macvlan 交换机的vlan是根据端口来划分的,如果一个PC接入vla ...

  4. etcd基本操作

    目录 概述 安装etcd 使用etcdctl操作etcd 数据库操作 非数据库操作 使用curl操作etcd 概述 etcd是一个用于共享配置和服务的高可用键值存储系统,由CoreOS使用开发并作为C ...

  5. Docker镜像构建(五)

    Docker 镜像介绍 Docker镜像构建分为两种,一种是手动构建,另一种是Dockerfile(自动构建) 手动构建docker镜像 案例:我们基于centos镜像进行构建,制作自己的nginx镜 ...

  6. 通过ORM模型看python对象创建过程

    简易django ORM模型如下所示: #!/usr/bin/env python # encoding: utf-8 """ @version: 1.0 @author ...

  7. Java上传文件夹(Jersey)

    背景介绍:公司要在CMS系统上为运营人员提供一个功能供运营人员将做好的活动页面上传到阿里云存储上,上传的内容为一个文件夹,文件夹内部有.html网页,JS文件夹下有JS文件,CSS文件夹下有样式表,I ...

  8. servlet拦截器

    servlet拦截未登录的用户请求 java代码: package com.gavin.filter; import java.io.IOException; import javax.servlet ...

  9. jQuery中使用attribute,prop获取,设置input的checked值

    1.prop方法获取.设置checked属性 当input控件checkbox设置了checked属性时,无论checked=”“或 checked=”checked”,$(obj).prop(“ch ...

  10. ajax状态码--转他人的

    var getXmlHttpRequest = function () { try{ //主流浏览器提供了XMLHttpRequest对象 return new XMLHttpRequest(); } ...