[英]How do I get the content length of a Django response object?
在Django中,我嘗試記錄請求和響應內容長度,這與Django服務器打印到stderr的內容完全相同。
[05/Apr/2011 22:59:08] "GET /pages/ HTTP/1.1" 200 332161
[05/Apr/2011 22:59:15] "GET /pages/12 HTTP/1.1" 301 0
[05/Apr/2011 22:59:15] "GET /pages/12/ HTTP/1.1" 200 361474
[05/Apr/2011 22:59:16] "GET /pages/12/load/tags/ HTTP/1.1" 200 13899
[05/Apr/2011 22:59:16] "GET /pages/12/load/comments/ HTTP/1.1" 200 82
所以,我寫了一個簡單的中間件如下,但是,'Content-Length'的值總是空的。
class LogHttpResponse(object):
def process_response(self, request, response):
import datetime
print response.items()
time_text = datetime.datetime.now().strftime('%m/%d/%Y %H:%M:%S')
print '[%s] "%s %s" %d %s' % (time_text, request.method, request.path,
response.status_code,
response.get('Content-Length', ''))
return response
我通過fire-debug檢查過, 響應頭中有'Content-Length' 。 但是中間件中沒有“內容長度”,“print response.items()”顯示:
[('Content-Type', 'text/html; charset=utf-8')]
中間件訂單有什么問題嗎?
我通過fire-debug檢查過,響應頭中有'Content-Length'。 但是中間件中沒有“內容長度”[...]中間件訂單是否有任何問題?
是。 中間件類在處理請求時自上而下(在settings.MIDDLEWARE_CLASSES
)應用,在處理響應時自下而上。 如果你的中間件類中有'django.middleware.http.ConditionalGetMiddleware'
,它會在HttpResponse中添加一個'Content-Length'
標題。
雖然如果你把你的中間件類放在settings.MIDDLEWARE_CLASSES
'django.middleware.http.ConditionalGetMiddleware'
,它會在處理響應時先應用這個,然后再應用ConditionalMiddleware
。 這就是為什么你在Firebug中看到Content-Length
標頭的原因,盡管在調用Middleware時它尚未處理。
有關Middleware的更多信息,請參閱Django Middleware文檔 。
len(response.content)
怎么樣? 這會給你回復內容中的字符數。 我猜這不一定與字節數相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.