django 從零開始 13 返回文件


進行一些操作返回文件,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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM