mirror of
https://github.com/django/django.git
synced 2025-07-04 09:49:12 +00:00
[soc2009/http-wsgi-improvements] Remove setting the Content-Length header for HttpResponseSendFile from the handler, for compatibility, and add a content attribute. Refs #2131.
Also adds a _charset class attribute to HttpResponse so the children all have it. git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2009/http-wsgi-improvements@11326 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
be96986ce8
commit
76fdeaf720
@ -251,12 +251,7 @@ class WSGIHandler(base.BaseHandler):
|
|||||||
filelike = open(filename, 'rb')
|
filelike = open(filename, 'rb')
|
||||||
return environ['wsgi.file_wrapper'](filelike,
|
return environ['wsgi.file_wrapper'](filelike,
|
||||||
response.block_size)
|
response.block_size)
|
||||||
else:
|
|
||||||
import os.path
|
|
||||||
if not os.path.exists(filename):
|
|
||||||
raise Exception("Filename provided to HttpResponseSendFile does not exist.")
|
|
||||||
response_headers.append(('Content-Length',
|
|
||||||
str(os.path.getsize(filename))))
|
|
||||||
start_response(status, response_headers)
|
start_response(status, response_headers)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
@ -272,6 +272,7 @@ class HttpResponse(object):
|
|||||||
|
|
||||||
_status_code = 200
|
_status_code = 200
|
||||||
_codec = None
|
_codec = None
|
||||||
|
_charset = None
|
||||||
|
|
||||||
def __init__(self, content='', mimetype=None, status=None,
|
def __init__(self, content='', mimetype=None, status=None,
|
||||||
content_type=None, request=None):
|
content_type=None, request=None):
|
||||||
@ -446,6 +447,8 @@ class HttpResponseSendFile(HttpResponse):
|
|||||||
self.block_size = block_size
|
self.block_size = block_size
|
||||||
self['Content-Disposition'] = ('attachment; filename=%s' %
|
self['Content-Disposition'] = ('attachment; filename=%s' %
|
||||||
os.path.basename(path_to_file))
|
os.path.basename(path_to_file))
|
||||||
|
if not settings.HTTPRESPONSE_SENDFILE_HEADER and os.path.exists(path_to_file):
|
||||||
|
self['Content-Length'] = str(os.path.getsize(path_to_file))
|
||||||
self._empty_content = False
|
self._empty_content = False
|
||||||
|
|
||||||
def set_empty_content(self):
|
def set_empty_content(self):
|
||||||
@ -457,6 +460,11 @@ class HttpResponseSendFile(HttpResponse):
|
|||||||
from django.core.servers.basehttp import FileWrapper
|
from django.core.servers.basehttp import FileWrapper
|
||||||
return FileWrapper(self.get_file_handler(), self.block_size)
|
return FileWrapper(self.get_file_handler(), self.block_size)
|
||||||
|
|
||||||
|
def _get_content(self):
|
||||||
|
return "".join(self.iter())
|
||||||
|
|
||||||
|
content = property(_get_content)
|
||||||
|
|
||||||
def get_file_handler(self):
|
def get_file_handler(self):
|
||||||
if not self.sendfile_fh:
|
if not self.sendfile_fh:
|
||||||
self.sendfile_fh = open(self.sendfile_filename, 'rb')
|
self.sendfile_fh = open(self.sendfile_filename, 'rb')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user