1
0
mirror of https://github.com/django/django.git synced 2025-10-24 06:06:09 +00:00

Moved django.core.handlers.wsgi.AdminMediaHandler to django.core.servers.basehttp. Makes more sense to have it in there, because its only use is for the development server.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@491 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Adrian Holovaty
2005-08-12 04:16:29 +00:00
parent 43f3b984e8
commit 199aa88ffb
3 changed files with 47 additions and 47 deletions

View File

@@ -144,48 +144,3 @@ class WSGIHandler(BaseHandler):
output = [response.get_content_as_string('utf-8')]
start_response(status, response_headers.items())
return output
class AdminMediaHandler:
"""
WSGI middleware that intercepts calls to the admin media directory, as
defined by the ADMIN_MEDIA_PREFIX setting, and serves those images.
Use this ONLY LOCALLY, for development! This hasn't been tested for
security and is not super efficient.
"""
def __init__(self, application):
from django.conf import settings
import django
self.application = application
self.media_dir = django.__path__[0] + '/conf/admin_media'
self.media_url = settings.ADMIN_MEDIA_PREFIX
def __call__(self, environ, start_response):
import os.path
# Ignore requests that aren't under ADMIN_MEDIA_PREFIX. Also ignore
# all requests if ADMIN_MEDIA_PREFIX isn't a relative URL.
if self.media_url.startswith('http://') or self.media_url.startswith('https://') \
or not environ['PATH_INFO'].startswith(self.media_url):
return self.application(environ, start_response)
# Find the admin file and serve it up, if it exists and is readable.
relative_url = environ['PATH_INFO'][len(self.media_url):]
file_path = os.path.join(self.media_dir, relative_url)
if not os.path.exists(file_path):
status = '404 NOT FOUND'
headers = {'Content-type': 'text/plain'}
output = ['Page not found: %s' % file_path]
else:
try:
fp = open(file_path, 'r')
except IOError:
status = '401 UNAUTHORIZED'
headers = {'Content-type': 'text/plain'}
output = ['Permission denied: %s' % file_path]
else:
status = '200 OK'
headers = {}
output = [fp.read()]
fp.close()
start_response(status, headers.items())
return output