web/lib/django/core/servers/basehttp.py
changeset 29 cc9b7e14412b
parent 0 0d40e90630ef
equal deleted inserted replaced
28:b758351d191f 29:cc9b7e14412b
    13 import re
    13 import re
    14 import stat
    14 import stat
    15 import sys
    15 import sys
    16 import urllib
    16 import urllib
    17 
    17 
       
    18 from django.core.management.color import color_style
    18 from django.utils.http import http_date
    19 from django.utils.http import http_date
    19 from django.utils._os import safe_join
    20 from django.utils._os import safe_join
    20 
    21 
    21 __version__ = "0.1"
    22 __version__ = "0.1"
    22 __all__ = ['WSGIServer','WSGIRequestHandler']
    23 __all__ = ['WSGIServer','WSGIRequestHandler']
   527     def server_bind(self):
   528     def server_bind(self):
   528         """Override server_bind to store the server name."""
   529         """Override server_bind to store the server name."""
   529         try:
   530         try:
   530             HTTPServer.server_bind(self)
   531             HTTPServer.server_bind(self)
   531         except Exception, e:
   532         except Exception, e:
   532             raise WSGIServerException, e
   533             raise WSGIServerException(e)
   533         self.setup_environ()
   534         self.setup_environ()
   534 
   535 
   535     def setup_environ(self):
   536     def setup_environ(self):
   536         # Set up base environment
   537         # Set up base environment
   537         env = self.base_environ = {}
   538         env = self.base_environ = {}
   555         from django.conf import settings
   556         from django.conf import settings
   556         self.admin_media_prefix = settings.ADMIN_MEDIA_PREFIX
   557         self.admin_media_prefix = settings.ADMIN_MEDIA_PREFIX
   557         # We set self.path to avoid crashes in log_message() on unsupported
   558         # We set self.path to avoid crashes in log_message() on unsupported
   558         # requests (like "OPTIONS").
   559         # requests (like "OPTIONS").
   559         self.path = ''
   560         self.path = ''
       
   561         self.style = color_style()
   560         BaseHTTPRequestHandler.__init__(self, *args, **kwargs)
   562         BaseHTTPRequestHandler.__init__(self, *args, **kwargs)
   561 
   563 
   562     def get_environ(self):
   564     def get_environ(self):
   563         env = self.server.base_environ.copy()
   565         env = self.server.base_environ.copy()
   564         env['SERVER_PROTOCOL'] = self.request_version
   566         env['SERVER_PROTOCOL'] = self.request_version
   606 
   608 
   607     def log_message(self, format, *args):
   609     def log_message(self, format, *args):
   608         # Don't bother logging requests for admin images or the favicon.
   610         # Don't bother logging requests for admin images or the favicon.
   609         if self.path.startswith(self.admin_media_prefix) or self.path == '/favicon.ico':
   611         if self.path.startswith(self.admin_media_prefix) or self.path == '/favicon.ico':
   610             return
   612             return
   611         sys.stderr.write("[%s] %s\n" % (self.log_date_time_string(), format % args))
   613 
       
   614         msg = "[%s] %s\n" % (self.log_date_time_string(), format % args)
       
   615 
       
   616         # Utilize terminal colors, if available
       
   617         if args[1][0] == '2':
       
   618             # Put 2XX first, since it should be the common case
       
   619             msg = self.style.HTTP_SUCCESS(msg)
       
   620         elif args[1][0] == '1':
       
   621             msg = self.style.HTTP_INFO(msg)
       
   622         elif args[1] == '304':
       
   623             msg = self.style.HTTP_NOT_MODIFIED(msg)
       
   624         elif args[1][0] == '3':
       
   625             msg = self.style.HTTP_REDIRECT(msg)
       
   626         elif args[1] == '404':
       
   627             msg = self.style.HTTP_NOT_FOUND(msg)
       
   628         elif args[1][0] == '4':
       
   629             msg = self.style.HTTP_BAD_REQUEST(msg)
       
   630         else:
       
   631             # Any 5XX, or any other response
       
   632             msg = self.style.HTTP_SERVER_ERROR(msg)
       
   633 
       
   634         sys.stderr.write(msg)
   612 
   635 
   613 class AdminMediaHandler(object):
   636 class AdminMediaHandler(object):
   614     """
   637     """
   615     WSGI middleware that intercepts calls to the admin media directory, as
   638     WSGI middleware that intercepts calls to the admin media directory, as
   616     defined by the ADMIN_MEDIA_PREFIX setting, and serves those images.
   639     defined by the ADMIN_MEDIA_PREFIX setting, and serves those images.