diff options
Diffstat (limited to 'lib/python2.7/site-packages/django/views/static.py')
-rw-r--r-- | lib/python2.7/site-packages/django/views/static.py | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/lib/python2.7/site-packages/django/views/static.py b/lib/python2.7/site-packages/django/views/static.py deleted file mode 100644 index c1baacd..0000000 --- a/lib/python2.7/site-packages/django/views/static.py +++ /dev/null @@ -1,143 +0,0 @@ -""" -Views and functions for serving static files. These are only to be used -during development, and SHOULD NOT be used in a production setting. -""" -from __future__ import unicode_literals - -import mimetypes -import os -import stat -import posixpath -import re - -from django.http import (CompatibleStreamingHttpResponse, Http404, - HttpResponse, HttpResponseRedirect, HttpResponseNotModified) -from django.template import loader, Template, Context, TemplateDoesNotExist -from django.utils.http import http_date, parse_http_date -from django.utils.six.moves.urllib.parse import unquote -from django.utils.translation import ugettext as _, ugettext_noop - -def serve(request, path, document_root=None, show_indexes=False): - """ - Serve static files below a given point in the directory structure. - - To use, put a URL pattern such as:: - - (r'^(?P<path>.*)$', 'django.views.static.serve', {'document_root' : '/path/to/my/files/'}) - - in your URLconf. You must provide the ``document_root`` param. You may - also set ``show_indexes`` to ``True`` if you'd like to serve a basic index - of the directory. This index view will use the template hardcoded below, - but if you'd like to override it, you can create a template called - ``static/directory_index.html``. - """ - path = posixpath.normpath(unquote(path)) - path = path.lstrip('/') - newpath = '' - for part in path.split('/'): - if not part: - # Strip empty path components. - continue - drive, part = os.path.splitdrive(part) - head, part = os.path.split(part) - if part in (os.curdir, os.pardir): - # Strip '.' and '..' in path. - continue - newpath = os.path.join(newpath, part).replace('\\', '/') - if newpath and path != newpath: - return HttpResponseRedirect(newpath) - fullpath = os.path.join(document_root, newpath) - if os.path.isdir(fullpath): - if show_indexes: - return directory_index(newpath, fullpath) - raise Http404(_("Directory indexes are not allowed here.")) - if not os.path.exists(fullpath): - raise Http404(_('"%(path)s" does not exist') % {'path': fullpath}) - # Respect the If-Modified-Since header. - statobj = os.stat(fullpath) - if not was_modified_since(request.META.get('HTTP_IF_MODIFIED_SINCE'), - statobj.st_mtime, statobj.st_size): - return HttpResponseNotModified() - content_type, encoding = mimetypes.guess_type(fullpath) - content_type = content_type or 'application/octet-stream' - response = CompatibleStreamingHttpResponse(open(fullpath, 'rb'), - content_type=content_type) - response["Last-Modified"] = http_date(statobj.st_mtime) - if stat.S_ISREG(statobj.st_mode): - response["Content-Length"] = statobj.st_size - if encoding: - response["Content-Encoding"] = encoding - return response - - -DEFAULT_DIRECTORY_INDEX_TEMPLATE = """ -{% load i18n %} -<!DOCTYPE html> -<html lang="en"> - <head> - <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> - <meta http-equiv="Content-Language" content="en-us" /> - <meta name="robots" content="NONE,NOARCHIVE" /> - <title>{% blocktrans %}Index of {{ directory }}{% endblocktrans %}</title> - </head> - <body> - <h1>{% blocktrans %}Index of {{ directory }}{% endblocktrans %}</h1> - <ul> - {% ifnotequal directory "/" %} - <li><a href="../">../</a></li> - {% endifnotequal %} - {% for f in file_list %} - <li><a href="{{ f|urlencode }}">{{ f }}</a></li> - {% endfor %} - </ul> - </body> -</html> -""" -template_translatable = ugettext_noop("Index of %(directory)s") - -def directory_index(path, fullpath): - try: - t = loader.select_template(['static/directory_index.html', - 'static/directory_index']) - except TemplateDoesNotExist: - t = Template(DEFAULT_DIRECTORY_INDEX_TEMPLATE, name='Default directory index template') - files = [] - for f in os.listdir(fullpath): - if not f.startswith('.'): - if os.path.isdir(os.path.join(fullpath, f)): - f += '/' - files.append(f) - c = Context({ - 'directory' : path + '/', - 'file_list' : files, - }) - return HttpResponse(t.render(c)) - -def was_modified_since(header=None, mtime=0, size=0): - """ - Was something modified since the user last downloaded it? - - header - This is the value of the If-Modified-Since header. If this is None, - I'll just return True. - - mtime - This is the modification time of the item we're talking about. - - size - This is the size of the item we're talking about. - """ - try: - if header is None: - raise ValueError - matches = re.match(r"^([^;]+)(; length=([0-9]+))?$", header, - re.IGNORECASE) - header_mtime = parse_http_date(matches.group(1)) - header_len = matches.group(3) - if header_len and int(header_len) != size: - raise ValueError - if int(mtime) > header_mtime: - raise ValueError - except (AttributeError, ValueError, OverflowError): - return True - return False |