2015-06-20 3 views
2

Я пытаюсь отправить CSV через запрос GET в Falcon. Я не знаю, с чего начать.Отправить CSV в теле через Falcon

Ниже мой код:

class LogCSV(object): 
"""CSV generator. 

This class responds to GET methods. 
""" 
def on_get(self, req, resp): 
    """Generates CSV for log.""" 

    mylist = [ 
     'one','two','three' 
    ] 

    myfile = open("testlogcsv.csv", 'w') 
    wr = csv.writer(myfile, quoting=csv.QUOTE_ALL) 
    wr.writerow(mylist) 

    resp.status = falcon.HTTP_200 
    resp.content_type = 'text/csv' 
    resp.body = wr 

Я не хочу spoonfeeding, пожалуйста, дайте мне знать, что я должен читать/смотреть, чтобы помочь решить эту проблему. Thanks

ответ

1

Вы должны использовать атрибут Response.stream. Перед возвратом должен быть установлен файл-подобный объект (объект с методом read()).

Итак, сначала вы должны написать свой CSV для этого объекта, а затем передать его Falcon. В вашем случае:

resp.content_type = 'text/csv' 
# Move the file pointer to the beginning 
myfile.seek(0) 
resp.stream = myfile 

Помните, чтобы переместить указатель файла в начало, используя seek(0), так Фалкон может прочитать его.

Если ваш файл является эфемерным и достаточно малым для хранения в памяти, вы можете использовать файл памяти, например BytesIO, вместо обычного файла. Он ведет себя как обычный файл, но никогда не записывается в файловую систему.

myfile = BytesIO() 
wr = csv.writer(myfile, quoting=csv.QUOTE_ALL) 

... 

resp.content_type = 'text/csv' 
# Move the file pointer to the beginning 
myfile.seek(0) 
resp.stream = myfile 

;)

Смежные вопросы