Django 输出非Html内容

May 6, 2015


实际项目中,通常需要输出非Html内容,比如下载页自动下载等,于是对Django输出非Html内容做了小结。


StringIO

  • StringIO经常被用来作为字符串的缓存,因为StringIO有个好处,他的有些接口和文件操作是一致的,也就是说用同样的代码,可以同时当成文件操作或者StringIO操作。

    
     temp=StringIO()
      

输出PDF

  • StringIO经常被用来作为字符串的缓存,因为StringIO有个好处,他的有些接口和文件操作是一致的,也就是说用同样的代码,可以同时当成文件操作或者StringIO操作。

  • 输出非Html内容时,需要对response的mimetype和Content-Disposition进行一些修改。

  • 输出PDF需要使用canvas来进行内容写入和保存

    
     from reportlab.pdfgen import canvas
    
     def showpdf(request):
         reponse=HttpResponse(mimetype='application/pdf')
         reponse['Content-Disposition']='attachment;filename=a.pdf'
    
         temp=StringIO()
    
         p=canvas.Canvas(temp)
         p.drawString(800,800,'asdhafuhnsdfn')
         p.showPage()
         p.save()
    
         response.write(temp.getvalue())
         return response
      

输出CSV

  • 输出其他内容的方法与PDF类似,只需要进行稍微的修改即可,以CSV为例,不在使用canvas,而使用如下代码
    
     writer=csv.writer(temp)
     writer.writerow(['aaaaaaaaaa','bbbbbbbbbbb'])