2012-08-28 25 views
18

Tôi đang sử dụng Flask và chạy foreman. Tôi dữ liệu mà tôi đã xây dựng trong bộ nhớ và tôi muốn người dùng có thể tải xuống dữ liệu này trong một tệp văn bản. Tôi không muốn ghi dữ liệu vào một tệp trên đĩa cục bộ và làm cho tệp đó có sẵn để tải xuống.Trong python sử dụng Flask, làm thế nào tôi có thể viết ra một đối tượng để tải xuống?

Tôi mới dùng python. Tôi nghĩ rằng tôi muốn tạo một số đối tượng tập tin trong bộ nhớ và sau đó thiết lập tiêu đề phản ứng, có thể?

Trả lời

28

Truyền trực tuyến tệp cho ứng dụng mà không lưu chúng vào đĩa được bao gồm trong phần "mẫu" của tài liệu của Flask - cụ thể là in the section on streaming. Về cơ bản, những gì bạn làm là trả lại một đối tượng chính thức Response gói trình lặp của bạn:

from flask import Response 

# construct your app 

@app.route("/get-file") 
def get_file(): 
    results = generate_file_data() 
    generator = (cell for row in results 
        for cell in row) 

    return Response(generator, 
         mimetype="text/plain", 
         headers={"Content-Disposition": 
            "attachment;filename=test.txt"}) 
+0

Điều này giúp tôi đi đúng hướng. Cảm ơn Sean! – swidnikk

+1

Tôi không có ý tưởng những gì tế bào cho hàng trong kết quả ... đang làm, bạn có thể giải thích? – swidnikk

+1

@swidnikk - đó là biểu thức trình tạo - nó giống như biểu thức hiểu danh sách '[x cho x trong phạm vi (10)]' ngoại trừ nó tạo ra đối tượng trình tạo thay vì danh sách. '(x cho x trong phạm vi (10))' không tạo ra toàn bộ danh sách cùng một lúc. Thay vào đó, nó sẽ đánh giá giá trị tiếp theo của 'x' mỗi lần' __next__' ('next' trong Python 2.X) được gọi. Các tài liệu cho bạn thấy một cách khác để tạo các trình tạo bằng cách sử dụng 'yield' (' def generator_func(): cho x trong phạm vi (10): yield x') Các biểu thức 'for' lồng nhau có ở đó bởi vì tôi giả định một danh sách các kiểu danh sách cấu trúc dữ liệu. Điều đó có ý nghĩa? –

Các vấn đề liên quan