1. 功能叙述

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

2. 前端页面

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

3. 后端功能

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

4. 说明代码思路

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

5.最后说明

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

文件下载功能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. 将SQL Server账户对应到Windows系统账户

    应用场景举例: SQL Server账户要访问外部资源,例如所拥有的Job要访问文件系统,而此文件系统需要Windows账户才有权限. 步骤: 1.       服务器新建凭据(Credentials ...

  2. python 模块之hashlib

    Hashlib模块 Python里面的hashlib模块提供了很多加密的算法,这里介绍一下hashlib的简单使用事例,用hashlib的md5算法加密数据,其他的所有加密算法使用方式上基本类似. h ...

  3. Go_17:GoLang中如何使用多参数属性传参

    我们常常因为传入的参数不确定而头疼不已,golang 为我们提供了接入多值参数用于解决这个问题.但是一般我们直接写已知代码即所有的值都知道一个一个塞进去就好了,但是绝大部分我们是得到用户的大量输入想通 ...

  4. 最短路径算法的实现(dijskstra):Python

    dijskstra最短路径算法步骤: 输入:图G=(V(G),E(G))有一个源顶点S和一个汇顶点t,以及对所有的边ij属于E(G)的非负边长出cij. 输出:G从s到t的最短路径的长度. 第0步:从 ...

  5. axios post 踩坑之 post传参

    今天在项目(vue2.0)使用axios进行post请求的时候,使用官方文档的格式传递给后台的数据是一整个json对象,参数已经传递出去了,但是后台获取不到,() 解决方法 利用aixos结合qs来解 ...

  6. A Gentle Guide to Machine Learning

    A Gentle Guide to Machine Learning Machine Learning is a subfield within Artificial Intelligence tha ...

  7. 使用lombok提高编码效率

    通过gettter,setter注解lombok已经帮我们自动生成了getter,setter方法!

  8. 使用JavaScript 修改浏览器 URL 地址栏

    现在的浏览器里,有一个十分有趣的功能,你可以在不刷新页面的情况下修改浏览器URL;在浏览过程中.你可以将浏览历史储存起来,当你在浏览器点击后退按钮的时候,你可以冲浏览历史上获得回退的信息,这听起来并不 ...

  9. How To Configure VMware fencing using fence_vmware_soap in RHEL High Availability Add On——RHEL Pacemaker中配置STONITH

    本文主要简单介绍一下如何在RHEL 7 Pacemaker中配置一个fence_vmware_soap类型的STONITH设备(仅供测试学习). STONITH是Shoot-The-Other-Nod ...

  10. 20155305乔磊2016-2017-2《Java程序设计》第八周学习总结

    20155305乔磊2016-2017-2<Java程序设计>第八周学习总结 教材学习内容总结 通用API 日志API 1.java.util.logging包提供了日志功能相关类与接口, ...