Django开发——输出非HTML内容

Web远不止有HTML,在Web上可以用多种格式来发布数据:RSS、PDF、图片等。
Django拥有一些便利的内建工具帮助你生成常见的非HTML内容:

  • RSS/Atom聚合文件
  • 站点地图

基础:视图和MIME类型

更正式地说,一个Django视图函数必须

  • 接收一个HttpRequest参数
  • 返回一个HttpResponse实例
    从一个视图返回一个非HTML内容的关键是在构造一个HttpResponse类,需要指定content_type参数。通过改变MIME类型,我们可以通知浏览器将要返回的数据是另一个类型。
    显示一张图片
def my_image(request):
    image_data=open('all_static/admin/img/img1.jpg',"rb").read()

    return HttpResponse(image_data,content_type="image/jpg")

由于Djnago1.7以上的版本不再使用mimetype而使用content_type来指定类型。
生成CSV文件
CSV是一种简单的数据格式,通常为电子表格所用。它主要是由一系列的表格行组成,每行中单元格只见使用逗号隔开。
因为csv模块操作的是类似文件的对象,所以可以使用HrrpResponse替换:
打印一张违规乘客每年的人数的表

import csv

UNRULY_PASSENGERS=[146,184,235,200,226,251,299,273,281,304,203]


def unruly_passengers_csv(request):

    #响应返回的是text/csv类型,这会告诉浏览器,返回的文档是CSV文件
    response=HttpResponse(content_type='test/csv')
    #响应会有一个附加的Content-Disposition头部,它包含有CSV文件的文件名。这个头部
    #会指示浏览器弹出对话框询问文件存放的位置。它会显示在浏览器的另存未对话框中
    #只需把HttpResponse当作字典使用就可以了
    response['Content-Disposition']='attachment;filename=unruly.csv'
    
    
    #与创建的应用程序界面挂接:csv.writer函数需要一个文件类的对象
    writer=csv.writer(response)
    # writer.writerow传递给它一个类似list或者tuple的可迭代对象,就可以在
    #CSV文件中写入一行
    writer.writerow(['Year','Unruly Airline Passengers'])

    for (year,num) in zip(range(1995,2006),UNRULY_PASSENGERS):

        writer.writerow([year,num])

    return response

这里写图片描述
在任何需要返回非HTML内容的时候,都需要经过以下几步:
创建一个HttpResponse响应对象,把它传给需要处理文件的函数,然后返回这个响应对象。
生成PDF文件
便携文档格式PDF是由Adobe开发的格式,主要用于呈现可打印的文档,其中包含有pixel-perfect格式,嵌入字体以及2D矢量图像。
安装ReportLab库:

pip install reportlab

和生成csv文件类似,因为ReportLab API也可以使用类似文件对象。

from reportlab.pdfgen import canvas



def hello_pdf(request):

    response=HttpResponse(content_type='application/pdf')
    response['Content-Disposition']='attachment;filename=hello.pdf'

    #创建一个PDF对象,使用这个响应作为它的文件
    p=canvas.Canvas(response)

    p.drawString(100,100,'Hello world.')

    #否则将会得到一个损坏的PDF文件
    p.showPage()
    p.save()

    return response

这里写图片描述
其他可能性
ZIP文件:zipfile模块,如果是TAR文件则可以使用标准库tarfile模块;
动态图片:PIL,PNG,JPEG,GIF以及其他工具。
图表:matplotlib;pygraphviz

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值