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})




  • 相关阅读:
    Oracle学习
    挑战练习11.5 恢复CrimeFragment的边距
    844. Backspace String Compare
    496. Next Greater Element I
    682. Baseball Game
    707. Design Linked List
    挑战练习10.6 实现高效的RecyclerView刷新
    挑战练习9.5 日期格式化
    挑战练习8.8 RecyclerView ViewType
    挑战练习6.5 限制作弊次数
  • 原文地址:https://www.cnblogs.com/raisok/p/15148998.html
Copyright © 2011-2022 走看看