進行一些操作返回文件,flask和django差不多,基本都是在返回response 並且對其中的返回頭部寫入返回文件信息
# image def image(request): f = open(r'C:\Users\Administrator\Desktop\反面.jpg','rb').read() return HttpResponse(f,content_type='image/jpg') # csv import csv UNRULY_PASSENGERS = [146,184,235,200,226,251,299,273,281,304,203] def to_csv(request): response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename=ceshi.csv' # 下載csv文件名設置filename b不能中文 writer = csv.writer(response) writer.writerow(['Year', 'Unruly Airline Passengers']) for (year, num) in zip(range(1995, 2006), UNRULY_PASSENGERS): writer.writerow([year, num]) return response # pdf from reportlab.pdfgen import canvas def to_pdf(request): response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename=ceshi_pdf.pdf' p = canvas.Canvas(response) p.drawString(500, 200, "Hello world.") # 和csv一樣,坐標位置是從左下角開始的 p.showPage() p.save() return response # 對大型文件進行一個內存操作,如果內容不大,可以使用上面的辦法 from io import BytesIO from reportlab.pdfgen import canvas from django.http import HttpResponse def to_max_pdf(request): response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename=ceshi_max.pdf' temp = BytesIO() #BytesIO是編碼內容保存在內存中 p = canvas.Canvas(temp) p.drawString(100, 100, "Hello world.") p.showPage() p.save() response.write(temp.getvalue()) return response