zoukankan      html  css  js  c++  java
  • django文件的下载实现

    • 在后台通过脚本生成了想要的结果,需要提供一个下载链接返回给前端用户
      html代码如下:
    <div class="col-md-12">
        <button onclick="window.location.href='/download/?id={{ expfile }} ' ">差异表达基因的结果</button>
        <br>
        <br>
        <button onclick="window.location.href='/download/?id={{ difffile }}' ">基因在不同样品中的表达量结果</button>
        <h1>表格显示的结果是查询的差异表达基因在不同数据库的差异倍数,pvalue,qvalue结果</h1>
    </div>

    在views.py里面传递一个文件的路径即可,我这里是将文件的路径存入得了数据库,然后再读出来的,这样可以随时获取差异基因和表达量文件所在的位置,同时进行后续的画图操作

    def showtable(request):
      gse_direct = ["Liver_cancer", "Myocardial_Infarction", "Macrophage", "VIH", "Renal_fibrosis"]
        if request.method == 'POST':
      # print (request.POST)
     #获取从表单以POST方式提交过来的数据  query_gene_list = request.POST.get('input_gene_list')
            disease_type = request.POST.get('disease_type')
            species_type = request.POST.get('spcies_type')
            tissue_type = request.POST.get('tissue_type')
            #######
      if len(query_gene_list) == 0:
      return render(request, 'error01.html', {'errorlog': "您输入的基因列表为空"})
            elif query_gene_list.replace("
    ", "").replace("
    ", "").encode('UTF-8').isalnum():
      genes = getgenelist(query_gene_list)
                genes = map(lambda x: x.upper(), genes)
                genes = tuple(genes)
            else:
      return render(request, 'error01.html', {'errorlog': "您输入的基因列表包含非法字符串,请检查你的基因列表"})
            if disease_type in gse_direct and len(genes) !=0:
      datapath,rpath=createpath()
                gsepath = datapath + "/" + disease_type
                degfilelist, expfilelist = fetch_gene.get_exp_list(gsepath)
                difftable,degfilename,expfilename = fetch_gene.get_result(genes, degfilelist, expfilelist, gsepath, rpath)
                # return HttpResponse("成功生成了你想要的文件")
      downexp = rpath + "/" + degfilename
                downdiff = rpath + "/" + expfilename
                inputgenenum = len(genes)
                Resultpath.objects.all().delete()
                Resultpath.objects.create(resultpath=rpath, expfilepath=downexp, difffilepath=downdiff,
      inputgenenum=inputgenenum,
      picpath=rpath)
                tablepre = DEGs.objects.all()
                resultdata = Resultpath.objects.all()
    
                # print (resultdata)
     #获取表头  hlist = ["Database_type", "gene_id", "log2FoldChange", "pvalue", "padj"]
                tablenum = int(resultdata.values('inputgenenum')[0]['inputgenenum'])+1
      resultpath = resultdata.values('resultpath')[0]['resultpath']
                downexp = resultdata.values('expfilepath')[0]['expfilepath']
                downdiff = resultdata.values('difffilepath')[0]['difffilepath']
                picpath = resultdata.values('picpath')[0]['picpath']
                paginator = Paginator(tablepre, tablenum)
                page = request.GET.get('page')
                if page: # 判断:获取当前页码的数据集,这样在模版就可以针对当前的数据集进行展示
      data_list = paginator.page(page).object_list
                else:
      data_list = paginator.page(1).object_list
                try: # 实现分页对象,分别判断当页码存在/不存在的情况,返回当前页码对象
      page_object = paginator.page(page)
                except PageNotAnInteger:
      page_object = paginator.page(1)
                except EmptyPage:
      page_object = paginator.page(paginator.num_pages)
                return render(request, 'show_table2.html', {
                    'page_object': page_object,
      'data_list': data_list,
      'myList': hlist,
      'resultpath': resultpath,
      'expfile': downexp,
      'difffile': downdiff,
      'img': "output.pdf"
      })
            else:
      return HttpResponse("其他的数据库还未开放,目前只能查询Liver_cancer数据库." )
        else:
      # 获取表格数据
      tablepre = DEGs.objects.all()
            resultdata = Resultpath.objects.all()
            #获取表头
      hlist = ["Database_type", "gene_id", "log2FoldChange", "pvalue", "padj"]
            print (Resultpath.objects.values('inputgenenum')[0]['inputgenenum'])
            tablenum = int(resultdata.values('inputgenenum')[0]['inputgenenum'])+1
      resultpath = resultdata.values('resultpath')[0]['resultpath']
            downexp = resultdata.values('expfilepath')[0]['expfilepath']
            downdiff = resultdata.values('difffilepath')[0]['difffilepath']
            print (downdiff)
            print (downexp)
            picpath = resultdata.values('picpath')[0]['picpath']
            paginator = Paginator(tablepre, tablenum)
            page = request.GET.get('page')
            if page: # 判断:获取当前页码的数据集,这样在模版就可以针对当前的数据集进行展示
      data_list = paginator.page(page).object_list
            else:
      data_list = paginator.page(1).object_list
            try: # 实现分页对象,分别判断当页码存在/不存在的情况,返回当前页码对象
      page_object = paginator.page(page)
            except PageNotAnInteger:
      page_object = paginator.page(1)
            except EmptyPage:
      page_object = paginator.page(paginator.num_pages)
            # 分页功能
      return render(request, 'show_table2.html', {
                'page_object': page_object,
      'data_list': data_list,
      'myList': hlist,
      'resultpath': resultpath,
      'expfile': downexp,
      'difffile': downdiff,
      'img': "output.pdf"
      })
            # return render(request, "show_table2.html")
     # return HttpResponse("ok") # return render(request,'download.html',{'resultpath':resultpath,'expfile':downexp,'difffile':downdiff})




  • 相关阅读:
    MVC3、如何应用EntityFramework 连接MySql 数据库 Kevin
    DEV EXPRESS Summary Footer 不显示 Kevin
    装饰模式 Kevin
    Dev 控件 GridControl 控件 二次绑定数据源的问题。 Kevin
    System.InvalidOperationException 异常 Kevin
    LINQ to XML Kevin
    代理模式——代码版“吊丝的故事” Kevin
    VS2012 中的设备 面板 Kevin
    maven 学习笔记(三)创建一个较复杂的 eclipse+android+maven 工程
    maven 学习笔记(一)eclipse+android+maven
  • 原文地址:https://www.cnblogs.com/raisok/p/15148998.html
Copyright © 2011-2022 走看看