摘要:在里,流式響應(yīng)是個好東西可以快速節(jié)省內(nèi)存地產(chǎn)生一個大型文件。目前項目里用于流式響應(yīng)的一個是,用于改善跨系統(tǒng)通訊時用戶產(chǎn)生的慢速的感覺。
在Django里,流式響應(yīng)StreamingHttpResponse是個好東西,可以快速、節(jié)省內(nèi)存地產(chǎn)生一個大型文件。
目前項目里用于流式響應(yīng)的一個是Eventsource,用于改善跨系統(tǒng)通訊時用戶產(chǎn)生的慢速的感覺。這個不細說了。
還有一個就是生成一個大的csv文件。
當Django進程處于gunicorn或者uwsgi等web容器中時,如果響應(yīng)超過一定時間沒有返回,就會被web容器終止掉,雖然我們可以通過加長web容器的超時時間來繞過這個問題,但是畢竟還是治標不治本。要根本上解決這個問題,Python的生成器、Django框架提供的StreamingHttpResponse這個流式響應(yīng)很有幫助
而在csv中,中文的處理也至關(guān)重要,要保證用excel打開csv不亂碼什么的。。為了節(jié)約空間,我就把所有代碼貼到一起了。。實際使用按照項目的規(guī)劃放置哈
上代碼:
pythonfrom __future__ import absolute_import import csv import codecs import cStringIO class Echo(object): def write(self, value): return value class UnicodeWriter: """ A CSV writer which will write rows to CSV file "f", which is encoded in the given encoding. """ def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds): # Redirect output to a queue self.queue = cStringIO.StringIO() self.writer = csv.writer(self.queue, dialect=dialect, **kwds) self.stream = f self.encoder = codecs.getincrementalencoder(encoding)() def writerow(self, row): self.writer.writerow([handle_column(s) for s in row]) # Fetch UTF-8 output from the queue ... data = self.queue.getvalue() data = data.decode("utf-8") # ... and reencode it into the target encoding data = self.encoder.encode(data) # write to the target stream value = self.stream.write(data) # empty queue self.queue.truncate(0) return value def writerows(self, rows): for row in rows: self.writerow(row) from django.views.generic import View from django.http.response import StreamingHttpResponse class ExampleView(View): headers=["一些","表頭"] def get(self,request): result = [["第一行","數(shù)據(jù)1"], ["第二行","數(shù)據(jù)2"]] echoer = Echo() writer = UnicodeWriter(echoer) def csv_itertor(): yield codecs.BOM_UTF8 yield writer.writerow(self.headers) for column in result: yield writer.writerow(column) response = StreamingHttpResponse( (row for row in csv_itertor()), content_type="text/csv;charset=utf-8") response["Content-Disposition" ] = "attachment;filename="example.csv"" return response
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/37515.html
摘要:設(shè)計風(fēng)格協(xié)議與用戶的通信協(xié)議,總是使用協(xié)議域名應(yīng)該盡量將部署在專用域名之下,如果確定很簡單,不會有進一步的擴展,可以考慮放在主域名之下。數(shù)據(jù)庫中的表示記錄同種數(shù)據(jù)的集合,所以中的名詞也應(yīng)該使用復(fù)數(shù)。 showImg(https://segmentfault.com/img/bVbdXlE?w=1560&h=913); RESTful Api設(shè)計風(fēng)格 協(xié)議:API與用戶的通信協(xié)議,總是使...
摘要:導(dǎo)出功能在管理后臺算是比較常見的了。但是如果用來打開,超過行的數(shù)據(jù)都會看不見,這是程序的問題。本次導(dǎo)出數(shù)據(jù)量很大。原因數(shù)值顯示精度為位造成精度丟失。 導(dǎo)出功能在管理后臺算是比較常見的了。在實現(xiàn)導(dǎo)出表格類信息的功能時,可以選擇兩種實現(xiàn)方式: 導(dǎo)出為excel 導(dǎo)出為csv文件格式 用csv方式導(dǎo)出,則可以像導(dǎo)出txt一樣,以文本流的方式進行流式處理,不但能導(dǎo)出海量信息,而且流式處理占...
摘要:基于注解生成加簽驗簽。是否寫入頭,建議第一次寫入指定,避免中文亂碼指定文件編碼默認不進行字段排序無待寫入的文件列表方法默認值說明必填創(chuàng)建實例,并且指定待讀取文件路徑。 csv 基于 java 注解生成加簽驗簽 csv。 開源地址: github csv) 創(chuàng)作原由 以前覺得 csv 文件的多寫非常簡單,就懶得封裝。 最近一個月寫了兩次 csv 文件相關(guān)的東西,發(fā)現(xiàn)要處理的細節(jié)還是有的,...
摘要:源網(wǎng)頁說明文檔所有關(guān)于你應(yīng)該且必須知道的。性能和優(yōu)化概述的兼容性旨在兼容多種不同版本的支持的兼容性地理框架打算成為世界級的地理框架。其目標是盡可能簡單地構(gòu)建應(yīng)用程序并利用空間使能數(shù)據(jù)的功能。 源網(wǎng)頁:https://docs.djangoproject.co... django說明文檔 所有關(guān)于django你應(yīng)該且必須知道的。 第一步 你是否django編程新手,那就從此開始!從零開始...
摘要:請注意,我們不再明確地將我們的請求或響應(yīng)明確綁定到給定的內(nèi)容類型。這允許返回完全可瀏覽網(wǎng)頁的表示。中文文檔目錄中文教程序列化中文教程請求和響應(yīng)中文教程基于類的視圖中文教程驗證和權(quán)限中文教程關(guān)系和超鏈接中文教程中文教程模式和客戶端庫 從這一點開始,我們將真正開始覆蓋REST框架的核心。我們來介紹幾個基本的構(gòu)建塊。 請求對象REST框架引入了Request擴展常規(guī)的對象HttpReques...
閱讀 2577·2021-11-25 09:43
閱讀 1849·2021-09-22 15:26
閱讀 3697·2019-08-30 15:56
閱讀 1703·2019-08-30 15:55
閱讀 1889·2019-08-30 15:54
閱讀 806·2019-08-30 15:52
閱讀 3135·2019-08-29 16:23
閱讀 886·2019-08-29 12:43