摘要:在里,流式響應是個好東西可以快速節省內存地產生一個大型文件。目前項目里用于流式響應的一個是,用于改善跨系統通訊時用戶產生的慢速的感覺。
在Django里,流式響應StreamingHttpResponse是個好東西,可以快速、節省內存地產生一個大型文件。
目前項目里用于流式響應的一個是Eventsource,用于改善跨系統通訊時用戶產生的慢速的感覺。這個不細說了。
還有一個就是生成一個大的csv文件。
當Django進程處于gunicorn或者uwsgi等web容器中時,如果響應超過一定時間沒有返回,就會被web容器終止掉,雖然我們可以通過加長web容器的超時時間來繞過這個問題,但是畢竟還是治標不治本。要根本上解決這個問題,Python的生成器、Django框架提供的StreamingHttpResponse這個流式響應很有幫助
而在csv中,中文的處理也至關重要,要保證用excel打開csv不亂碼什么的。。為了節約空間,我就把所有代碼貼到一起了。。實際使用按照項目的規劃放置哈
上代碼:
</>復制代碼
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 = [["第一行","數據1"],
["第二行","數據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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/37515.html
摘要:設計風格協議與用戶的通信協議,總是使用協議域名應該盡量將部署在專用域名之下,如果確定很簡單,不會有進一步的擴展,可以考慮放在主域名之下。數據庫中的表示記錄同種數據的集合,所以中的名詞也應該使用復數。 showImg(https://segmentfault.com/img/bVbdXlE?w=1560&h=913); RESTful Api設計風格 協議:API與用戶的通信協議,總是使...
摘要:導出功能在管理后臺算是比較常見的了。但是如果用來打開,超過行的數據都會看不見,這是程序的問題。本次導出數據量很大。原因數值顯示精度為位造成精度丟失。 導出功能在管理后臺算是比較常見的了。在實現導出表格類信息的功能時,可以選擇兩種實現方式: 導出為excel 導出為csv文件格式 用csv方式導出,則可以像導出txt一樣,以文本流的方式進行流式處理,不但能導出海量信息,而且流式處理占...
摘要:基于注解生成加簽驗簽。是否寫入頭,建議第一次寫入指定,避免中文亂碼指定文件編碼默認不進行字段排序無待寫入的文件列表方法默認值說明必填創建實例,并且指定待讀取文件路徑。 csv 基于 java 注解生成加簽驗簽 csv。 開源地址: github csv) 創作原由 以前覺得 csv 文件的多寫非常簡單,就懶得封裝。 最近一個月寫了兩次 csv 文件相關的東西,發現要處理的細節還是有的,...
摘要:源網頁說明文檔所有關于你應該且必須知道的。性能和優化概述的兼容性旨在兼容多種不同版本的支持的兼容性地理框架打算成為世界級的地理框架。其目標是盡可能簡單地構建應用程序并利用空間使能數據的功能。 源網頁:https://docs.djangoproject.co... django說明文檔 所有關于django你應該且必須知道的。 第一步 你是否django編程新手,那就從此開始!從零開始...
摘要:請注意,我們不再明確地將我們的請求或響應明確綁定到給定的內容類型。這允許返回完全可瀏覽網頁的表示。中文文檔目錄中文教程序列化中文教程請求和響應中文教程基于類的視圖中文教程驗證和權限中文教程關系和超鏈接中文教程中文教程模式和客戶端庫 從這一點開始,我們將真正開始覆蓋REST框架的核心。我們來介紹幾個基本的構建塊。 請求對象REST框架引入了Request擴展常規的對象HttpReques...
閱讀 2587·2021-11-25 09:43
閱讀 1864·2021-09-22 15:26
閱讀 3746·2019-08-30 15:56
閱讀 1715·2019-08-30 15:55
閱讀 1901·2019-08-30 15:54
閱讀 819·2019-08-30 15:52
閱讀 3159·2019-08-29 16:23
閱讀 899·2019-08-29 12:43