Skip to content

Commit

Permalink
Fixed #8409 -- The runserver now uses conditional GET for admin media…
Browse files Browse the repository at this point in the history
… files, instead of reloading the files off disk for every request. Thanks for reporting, andylowry

git-svn-id: http://code.djangoproject.com/svn/django/trunk@9055 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
adrianholovaty committed Sep 17, 2008
1 parent 7a80a9f commit cc7b0f9
Showing 1 changed file with 18 additions and 7 deletions.
25 changes: 18 additions & 7 deletions django/core/servers/basehttp.py
Expand Up @@ -11,6 +11,7 @@
import mimetypes
import os
import re
import stat
import sys
import urllib

Expand Down Expand Up @@ -648,13 +649,23 @@ def __call__(self, environ, start_response):
headers = {'Content-type': 'text/plain'}
output = ['Permission denied: %s' % file_path]
else:
status = '200 OK'
headers = {}
mime_type = mimetypes.guess_type(file_path)[0]
if mime_type:
headers['Content-Type'] = mime_type
output = [fp.read()]
fp.close()
# This is a very simple implementation of conditional GET with
# the Last-Modified header. It makes media files a bit speedier
# because the files are only read off disk for the first
# request (assuming the browser/client supports conditional
# GET).
mtime = http_date(os.stat(file_path)[stat.ST_MTIME])
headers = {'Last-Modified': mtime}
if environ.get('HTTP_IF_MODIFIED_SINCE', None) == mtime:
status = '304 NOT MODIFIED'
output = []
else:
status = '200 OK'
mime_type = mimetypes.guess_type(file_path)[0]
if mime_type:
headers['Content-Type'] = mime_type
output = [fp.read()]
fp.close()
start_response(status, headers.items())
return output

Expand Down

0 comments on commit cc7b0f9

Please sign in to comment.