diff options
| author | Adrian Holovaty <adrian@holovaty.com> | 2008-09-17 05:42:12 +0000 |
|---|---|---|
| committer | Adrian Holovaty <adrian@holovaty.com> | 2008-09-17 05:42:12 +0000 |
| commit | cc7b0f986a8ef897fba258d03d0a43f3e1c5799e (patch) | |
| tree | f42c1c75fd46e26d8a4a185a0e774446c7245a17 | |
| parent | 7a80a9fa7de4a9e466e66fb4d2b3242e5da67334 (diff) | |
Fixed #8409 -- The runserver now uses conditional GET for admin media 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
| -rw-r--r-- | django/core/servers/basehttp.py | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/django/core/servers/basehttp.py b/django/core/servers/basehttp.py index f88f8c70bb..287143b794 100644 --- a/django/core/servers/basehttp.py +++ b/django/core/servers/basehttp.py @@ -11,6 +11,7 @@ from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer import mimetypes import os import re +import stat import sys import urllib @@ -648,13 +649,23 @@ class AdminMediaHandler(object): 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 |
