diff --git a/django/contrib/admin/views/changelist.py b/django/contrib/admin/views/changelist.py
index bfcbc3f43c..488e1dc7b7 100644
--- a/django/contrib/admin/views/changelist.py
+++ b/django/contrib/admin/views/changelist.py
@@ -3,7 +3,7 @@ from django.contrib.admin.views.main import get_model_and_app
from django.contrib.admin.filterspecs import FilterSpec
from django.db import models
from django.db.models.query import handle_legacy_orderlist
-from django.utils.httpwrappers import HttpResponse, HttpResponseRedirect
+from django.http import HttpResponse, HttpResponseRedirect
from django.core.paginator import ObjectPaginator, InvalidPage
from django.core.extensions import DjangoContext as Context
from django.core.extensions import render_to_response
diff --git a/django/contrib/admin/views/decorators.py b/django/contrib/admin/views/decorators.py
index f0541ffb24..2415ac44ea 100644
--- a/django/contrib/admin/views/decorators.py
+++ b/django/contrib/admin/views/decorators.py
@@ -1,7 +1,7 @@
from django.core.extensions import DjangoContext, render_to_response
from django.conf.settings import SECRET_KEY
from django.contrib.auth.models import User, SESSION_KEY
-from django.utils import httpwrappers
+from django import http
from django.utils.translation import gettext_lazy
import base64, md5
import cPickle as pickle
@@ -93,7 +93,7 @@ def staff_member_required(view_func):
return view_func(request, *args, **kwargs)
else:
request.session.delete_test_cookie()
- return httpwrappers.HttpResponseRedirect(request.path)
+ return http.HttpResponseRedirect(request.path)
else:
return _display_login_form(request, ERROR_MESSAGE)
diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py
index 38e9f3ca13..8e55dc98c4 100644
--- a/django/contrib/admin/views/main.py
+++ b/django/contrib/admin/views/main.py
@@ -9,7 +9,7 @@ from django.core.extensions import DjangoContext as Context
from django.core.extensions import get_object_or_404, render_to_response
from django.utils import dateformat
from django.utils.html import escape, strip_tags
-from django.utils.httpwrappers import HttpResponse, HttpResponseRedirect
+from django.http import HttpResponse, HttpResponseRedirect
from django.utils.text import capfirst, get_text_list
import operator
from itertools import izip
diff --git a/django/contrib/admin/views/stages/add.py b/django/contrib/admin/views/stages/add.py
index a4532fe4b7..31c018daf3 100644
--- a/django/contrib/admin/views/stages/add.py
+++ b/django/contrib/admin/views/stages/add.py
@@ -6,7 +6,7 @@ from django.core import formfields, template
from django.core.exceptions import Http404, ImproperlyConfigured, ObjectDoesNotExist, PermissionDenied
from django.core.extensions import DjangoContext as Context
from django.db import models
-from django.utils.httpwrappers import HttpResponse, HttpResponseRedirect
+from django.http import HttpResponse, HttpResponseRedirect
from django.utils.text import capfirst, get_text_list
try:
from django.contrib.admin.models import LogEntry, ADDITION, CHANGE, DELETION
diff --git a/django/contrib/admin/views/stages/change.py b/django/contrib/admin/views/stages/change.py
index 06a08efbb9..c8b3adcbf6 100644
--- a/django/contrib/admin/views/stages/change.py
+++ b/django/contrib/admin/views/stages/change.py
@@ -5,7 +5,7 @@ from django.core.extensions import DjangoContext as Context
from django.contrib.admin.views.stages.modify import render_change_form
from django.db import models
from django.utils.text import capfirst, get_text_list
-from django.utils.httpwrappers import HttpResponse, HttpResponseRedirect
+from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.admin.views.decorators import staff_member_required
try:
from django.contrib.admin.models import LogEntry, ADDITION, CHANGE, DELETION
diff --git a/django/contrib/admin/views/stages/delete.py b/django/contrib/admin/views/stages/delete.py
index cd4714e8c4..a5d296e21b 100644
--- a/django/contrib/admin/views/stages/delete.py
+++ b/django/contrib/admin/views/stages/delete.py
@@ -9,7 +9,7 @@ try:
from django.contrib.admin.models import LogEntry, ADDITION, CHANGE, DELETION
except ImportError:
raise ImproperlyConfigured, "You don't have 'django.contrib.admin' in INSTALLED_APPS."
-from django.utils.httpwrappers import HttpResponse, HttpResponseRedirect
+from django.http import HttpResponse, HttpResponseRedirect
def _nest_help(obj, depth, val):
current = obj
diff --git a/django/contrib/comments/views/comments.py b/django/contrib/comments/views/comments.py
index c5e07d171a..eeb279a5aa 100644
--- a/django/contrib/comments/views/comments.py
+++ b/django/contrib/comments/views/comments.py
@@ -6,7 +6,7 @@ from django.contrib.auth.models import SESSION_KEY
from django.contrib.comments.models import Comment, FreeComment, PHOTOS_REQUIRED, PHOTOS_OPTIONAL, RATINGS_REQUIRED, RATINGS_OPTIONAL, IS_PUBLIC
from django.contrib.contenttypes.models import ContentType
from django.parts.auth.formfields import AuthenticationForm
-from django.utils.httpwrappers import HttpResponseRedirect
+from django.http import HttpResponseRedirect
from django.utils.text import normalize_newlines
from django.conf.settings import BANNED_IPS, COMMENTS_ALLOW_PROFANITIES, COMMENTS_SKETCHY_USERS_GROUP, COMMENTS_FIRST_FEW, SITE_ID
from django.utils.translation import ngettext
diff --git a/django/contrib/comments/views/userflags.py b/django/contrib/comments/views/userflags.py
index 3bcc5b2122..baa2d42538 100644
--- a/django/contrib/comments/views/userflags.py
+++ b/django/contrib/comments/views/userflags.py
@@ -2,7 +2,7 @@ from django.core.extensions import DjangoContext, render_to_response
from django.core.exceptions import Http404
from django.models.comments import comments, moderatordeletions, userflags
from django.views.decorators.auth import login_required
-from django.utils.httpwrappers import HttpResponseRedirect
+from django.http import HttpResponseRedirect
from django.conf.settings import SITE_ID
def flag(request, comment_id):
diff --git a/django/contrib/flatpages/views.py b/django/contrib/flatpages/views.py
index 18595e6a35..bdc86d258e 100644
--- a/django/contrib/flatpages/views.py
+++ b/django/contrib/flatpages/views.py
@@ -1,7 +1,7 @@
from django.contrib.flatpages.models import FlatPage
from django.core import template_loader
from django.core.extensions import get_object_or_404, DjangoContext
-from django.utils.httpwrappers import HttpResponse
+from django.http import HttpResponse
from django.conf.settings import SITE_ID
DEFAULT_TEMPLATE = 'flatpages/default'
diff --git a/django/contrib/redirects/middleware.py b/django/contrib/redirects/middleware.py
index d284629786..aa75f41152 100644
--- a/django/contrib/redirects/middleware.py
+++ b/django/contrib/redirects/middleware.py
@@ -1,5 +1,5 @@
from django.contrib.redirects.models import Redirect
-from django.utils import httpwrappers
+from django import http
from django.conf.settings import APPEND_SLASH, SITE_ID
class RedirectFallbackMiddleware:
@@ -20,8 +20,8 @@ class RedirectFallbackMiddleware:
pass
if r is not None:
if r == '':
- return httpwrappers.HttpResponseGone()
- return httpwrappers.HttpResponsePermanentRedirect(r.new_path)
+ return http.HttpResponseGone()
+ return http.HttpResponsePermanentRedirect(r.new_path)
# No redirect was found. Return the response.
return response
diff --git a/django/contrib/syndication/views.py b/django/contrib/syndication/views.py
index 5117746f19..2de5f886b1 100644
--- a/django/contrib/syndication/views.py
+++ b/django/contrib/syndication/views.py
@@ -1,6 +1,6 @@
from django.contrib.syndication import feeds
from django.core.exceptions import Http404
-from django.utils.httpwrappers import HttpResponse
+from django.http import HttpResponse
def feed(request, url, feed_dict=None):
if not feed_dict:
diff --git a/django/core/extensions.py b/django/core/extensions.py
index 9fef65fd58..09e7c20242 100644
--- a/django/core/extensions.py
+++ b/django/core/extensions.py
@@ -5,7 +5,7 @@
from django.core.exceptions import Http404, ImproperlyConfigured
from django.core.template import Context, loader
from django.conf.settings import TEMPLATE_CONTEXT_PROCESSORS
-from django.utils.httpwrappers import HttpResponse
+from django.http import HttpResponse
_standard_context_processors = None
diff --git a/django/core/handlers/base.py b/django/core/handlers/base.py
index 6fb28d96ae..6e8cb040f6 100644
--- a/django/core/handlers/base.py
+++ b/django/core/handlers/base.py
@@ -1,6 +1,6 @@
from django.core import signals
from django.dispatch import dispatcher
-from django.utils import httpwrappers
+from django import http
class BaseHandler:
def __init__(self):
@@ -93,7 +93,7 @@ class BaseHandler:
callback, param_dict = resolver.resolve404()
return callback(request, **param_dict)
except exceptions.PermissionDenied:
- return httpwrappers.HttpResponseForbidden('
Permission denied
')
+ return http.HttpResponseForbidden('Permission denied
')
except: # Handle everything else, including SuspiciousOperation, etc.
if DEBUG:
return self.get_technical_error_response(request)
diff --git a/django/core/handlers/modpython.py b/django/core/handlers/modpython.py
index 2d210c903d..91ca939b7c 100644
--- a/django/core/handlers/modpython.py
+++ b/django/core/handlers/modpython.py
@@ -1,7 +1,8 @@
from django.core.handlers.base import BaseHandler
from django.core import signals
from django.dispatch import dispatcher
-from django.utils import datastructures, httpwrappers
+from django.utils import datastructures
+from djang import http
from pprint import pformat
import os
@@ -9,7 +10,7 @@ import os
# settings) until after ModPythonHandler has been called; otherwise os.environ
# won't be set up correctly (with respect to settings).
-class ModPythonRequest(httpwrappers.HttpRequest):
+class ModPythonRequest(http.HttpRequest):
def __init__(self, req):
self._req = req
self.path = req.uri
@@ -25,9 +26,9 @@ class ModPythonRequest(httpwrappers.HttpRequest):
def _load_post_and_files(self):
"Populates self._post and self._files"
if self._req.headers_in.has_key('content-type') and self._req.headers_in['content-type'].startswith('multipart'):
- self._post, self._files = httpwrappers.parse_file_upload(self._req.headers_in, self.raw_post_data)
+ self._post, self._files = http.parse_file_upload(self._req.headers_in, self.raw_post_data)
else:
- self._post, self._files = httpwrappers.QueryDict(self.raw_post_data), datastructures.MultiValueDict()
+ self._post, self._files = http.QueryDict(self.raw_post_data), datastructures.MultiValueDict()
def _get_request(self):
if not hasattr(self, '_request'):
@@ -36,7 +37,7 @@ class ModPythonRequest(httpwrappers.HttpRequest):
def _get_get(self):
if not hasattr(self, '_get'):
- self._get = httpwrappers.QueryDict(self._req.args)
+ self._get = http.QueryDict(self._req.args)
return self._get
def _set_get(self, get):
@@ -52,7 +53,7 @@ class ModPythonRequest(httpwrappers.HttpRequest):
def _get_cookies(self):
if not hasattr(self, '_cookies'):
- self._cookies = httpwrappers.parse_cookie(self._req.headers_in.get('cookie', ''))
+ self._cookies = http.parse_cookie(self._req.headers_in.get('cookie', ''))
return self._cookies
def _set_cookies(self, cookies):
diff --git a/django/core/handlers/wsgi.py b/django/core/handlers/wsgi.py
index fd79805d40..7e75bb2f43 100644
--- a/django/core/handlers/wsgi.py
+++ b/django/core/handlers/wsgi.py
@@ -1,7 +1,8 @@
from django.core.handlers.base import BaseHandler
from django.core import signals
from django.dispatch import dispatcher
-from django.utils import datastructures, httpwrappers
+from django.utils import datastructures
+from django import http
from pprint import pformat
# See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
@@ -49,7 +50,7 @@ STATUS_CODE_TEXT = {
505: 'HTTP VERSION NOT SUPPORTED',
}
-class WSGIRequest(httpwrappers.HttpRequest):
+class WSGIRequest(http.HttpRequest):
def __init__(self, environ):
self.environ = environ
self.path = environ['PATH_INFO']
@@ -70,11 +71,11 @@ class WSGIRequest(httpwrappers.HttpRequest):
if self.environ.get('CONTENT_TYPE', '').startswith('multipart'):
header_dict = dict([(k, v) for k, v in self.environ.items() if k.startswith('HTTP_')])
header_dict['Content-Type'] = self.environ.get('CONTENT_TYPE', '')
- self._post, self._files = httpwrappers.parse_file_upload(header_dict, self.raw_post_data)
+ self._post, self._files = http.parse_file_upload(header_dict, self.raw_post_data)
else:
- self._post, self._files = httpwrappers.QueryDict(self.raw_post_data), datastructures.MultiValueDict()
+ self._post, self._files = http.QueryDict(self.raw_post_data), datastructures.MultiValueDict()
else:
- self._post, self._files = httpwrappers.QueryDict(''), datastructures.MultiValueDict()
+ self._post, self._files = http.QueryDict(''), datastructures.MultiValueDict()
def _get_request(self):
if not hasattr(self, '_request'):
@@ -84,7 +85,7 @@ class WSGIRequest(httpwrappers.HttpRequest):
def _get_get(self):
if not hasattr(self, '_get'):
# The WSGI spec says 'QUERY_STRING' may be absent.
- self._get = httpwrappers.QueryDict(self.environ.get('QUERY_STRING', ''))
+ self._get = http.QueryDict(self.environ.get('QUERY_STRING', ''))
return self._get
def _set_get(self, get):
@@ -100,7 +101,7 @@ class WSGIRequest(httpwrappers.HttpRequest):
def _get_cookies(self):
if not hasattr(self, '_cookies'):
- self._cookies = httpwrappers.parse_cookie(self.environ.get('HTTP_COOKIE', ''))
+ self._cookies = http.parse_cookie(self.environ.get('HTTP_COOKIE', ''))
return self._cookies
def _set_cookies(self, cookies):
diff --git a/django/utils/httpwrappers.py b/django/http/__init__.py
similarity index 100%
rename from django/utils/httpwrappers.py
rename to django/http/__init__.py
diff --git a/django/middleware/cache.py b/django/middleware/cache.py
index bb3396c849..b5e142a383 100644
--- a/django/middleware/cache.py
+++ b/django/middleware/cache.py
@@ -1,7 +1,7 @@
from django.conf import settings
from django.core.cache import cache
from django.utils.cache import get_cache_key, learn_cache_key, patch_response_headers
-from django.utils.httpwrappers import HttpResponseNotModified
+from django.http import HttpResponseNotModified
class CacheMiddleware:
"""
diff --git a/django/middleware/common.py b/django/middleware/common.py
index aa8f4ec071..720de3c681 100644
--- a/django/middleware/common.py
+++ b/django/middleware/common.py
@@ -1,5 +1,5 @@
from django.conf import settings
-from django.utils import httpwrappers
+from django import http
from django.core.mail import mail_managers
import md5, os
@@ -27,7 +27,7 @@ class CommonMiddleware:
if request.META.has_key('HTTP_USER_AGENT'):
for user_agent_regex in settings.DISALLOWED_USER_AGENTS:
if user_agent_regex.search(request.META['HTTP_USER_AGENT']):
- return httpwrappers.HttpResponseForbidden('Forbidden
')
+ return http.HttpResponseForbidden('Forbidden
')
# Check for a redirect based on settings.APPEND_SLASH and settings.PREPEND_WWW
old_url = [request.META.get('HTTP_HOST', ''), request.path]
@@ -46,7 +46,7 @@ class CommonMiddleware:
newurl = new_url[1]
if request.GET:
newurl += '?' + request.GET.urlencode()
- return httpwrappers.HttpResponsePermanentRedirect(newurl)
+ return http.HttpResponsePermanentRedirect(newurl)
return None
@@ -69,7 +69,7 @@ class CommonMiddleware:
if settings.USE_ETAGS:
etag = md5.new(response.get_content_as_string(settings.DEFAULT_CHARSET)).hexdigest()
if request.META.get('HTTP_IF_NONE_MATCH') == etag:
- response = httpwrappers.HttpResponseNotModified()
+ response = http.HttpResponseNotModified()
else:
response['ETag'] = etag
diff --git a/django/middleware/doc.py b/django/middleware/doc.py
index c96be2c0f6..6376fe4d5c 100644
--- a/django/middleware/doc.py
+++ b/django/middleware/doc.py
@@ -1,5 +1,5 @@
from django.conf import settings
-from django.utils import httpwrappers
+from django import http
class XViewMiddleware:
"""
@@ -12,6 +12,6 @@ class XViewMiddleware:
documentation module to lookup the view function for an arbitrary page.
"""
if request.META['REQUEST_METHOD'] == 'HEAD' and request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS:
- response = httpwrappers.HttpResponse()
+ response = http.HttpResponse()
response['X-View'] = "%s.%s" % (view_func.__module__, view_func.__name__)
return response
diff --git a/django/views/auth/login.py b/django/views/auth/login.py
index 01f09016c4..ca33b2784e 100644
--- a/django/views/auth/login.py
+++ b/django/views/auth/login.py
@@ -3,7 +3,7 @@ from django.core import formfields
from django.core.extensions import DjangoContext, render_to_response
from django.contrib.auth.models import SESSION_KEY
from django.contrib.sites.models import Site
-from django.utils.httpwrappers import HttpResponse, HttpResponseRedirect
+from django.http import HttpResponse, HttpResponseRedirect
REDIRECT_FIELD_NAME = 'next'
LOGIN_URL = '/accounts/login/'
diff --git a/django/views/debug.py b/django/views/debug.py
index 674d4e4bfd..70978a5128 100644
--- a/django/views/debug.py
+++ b/django/views/debug.py
@@ -1,7 +1,7 @@
from django.conf import settings
from django.core.template import Template, Context, TemplateDoesNotExist
from django.utils.html import escape
-from django.utils.httpwrappers import HttpResponseServerError, HttpResponseNotFound
+from django.http import HttpResponseServerError, HttpResponseNotFound
import inspect, os, re, sys
from itertools import count, izip
from os.path import dirname, join as pathjoin
diff --git a/django/views/decorators/http.py b/django/views/decorators/http.py
index b9b6bac757..a15e82fcc7 100644
--- a/django/views/decorators/http.py
+++ b/django/views/decorators/http.py
@@ -4,7 +4,7 @@ Decorators for views based on HTTP headers.
from django.utils.decorators import decorator_from_middleware
from django.middleware.http import ConditionalGetMiddleware
-from django.utils.httpwrappers import HttpResponseForbidden
+from django.http import HttpResponseForbidden
conditional_page = decorator_from_middleware(ConditionalGetMiddleware)
diff --git a/django/views/defaults.py b/django/views/defaults.py
index bfcd5adeba..c601fa0255 100644
--- a/django/views/defaults.py
+++ b/django/views/defaults.py
@@ -2,7 +2,7 @@ from django.core.exceptions import Http404, ObjectDoesNotExist
from django.core.template import Context, loader
from django.contrib.contenttypes.models import ContentType
from django.contrib.sites.models import Site
-from django.utils import httpwrappers
+from django import http
def shortcut(request, content_type_id, object_id):
"Redirect to an object's page based on a content-type ID and an object ID."
@@ -22,7 +22,7 @@ def shortcut(request, content_type_id, object_id):
# If the object actually defines a domain, we're done.
if absurl.startswith('http://'):
- return httpwrappers.HttpResponseRedirect(absurl)
+ return http.HttpResponseRedirect(absurl)
object_domain = None
@@ -45,8 +45,8 @@ def shortcut(request, content_type_id, object_id):
object_domain = Site.objects.get_current().domain
except Site.DoesNotExist:
# Finally, give up and use a URL without the domain name
- return httpwrappers.HttpResponseRedirect(obj.get_absolute_url())
- return httpwrappers.HttpResponseRedirect('http://%s%s' % (object_domain, obj.get_absolute_url()))
+ return http.HttpResponseRedirect(obj.get_absolute_url())
+ return http.HttpResponseRedirect('http://%s%s' % (object_domain, obj.get_absolute_url()))
def page_not_found(request, template_name='404'):
"""
@@ -57,7 +57,7 @@ def page_not_found(request, template_name='404'):
Context: None
"""
t = loader.get_template(template_name)
- return httpwrappers.HttpResponseNotFound(t.render(Context()))
+ return http.HttpResponseNotFound(t.render(Context()))
def server_error(request, template_name='500'):
"""
@@ -67,4 +67,4 @@ def server_error(request, template_name='500'):
Context: None
"""
t = loader.get_template(template_name)
- return httpwrappers.HttpResponseServerError(t.render(Context()))
+ return http.HttpResponseServerError(t.render(Context()))
diff --git a/django/views/generic/create_update.py b/django/views/generic/create_update.py
index 7ddde87650..7d326ade0c 100644
--- a/django/views/generic/create_update.py
+++ b/django/views/generic/create_update.py
@@ -5,7 +5,7 @@ from django.core import formfields, meta
from django.views.auth.login import redirect_to_login
from django.core.extensions import DjangoContext
from django.core.paginator import ObjectPaginator, InvalidPage
-from django.utils.httpwrappers import HttpResponse, HttpResponseRedirect
+from django.http import HttpResponse, HttpResponseRedirect
from django.core.exceptions import Http404, ObjectDoesNotExist, ImproperlyConfigured
def create_object(request, app_label, module_name, template_name=None,
diff --git a/django/views/generic/date_based.py b/django/views/generic/date_based.py
index 1b9e8e9587..19ef0a9a35 100644
--- a/django/views/generic/date_based.py
+++ b/django/views/generic/date_based.py
@@ -3,7 +3,7 @@ from django.core.exceptions import Http404, ObjectDoesNotExist
from django.core.extensions import DjangoContext
from django.core.xheaders import populate_xheaders
from django.models import get_module
-from django.utils.httpwrappers import HttpResponse
+from django.http import HttpResponse
import datetime, time
def archive_index(request, app_label, module_name, date_field, num_latest=15,
diff --git a/django/views/generic/list_detail.py b/django/views/generic/list_detail.py
index d81d46f52b..dd961bb51e 100644
--- a/django/views/generic/list_detail.py
+++ b/django/views/generic/list_detail.py
@@ -1,6 +1,6 @@
from django import models
from django.core.template import loader
-from django.utils.httpwrappers import HttpResponse
+from django.http import HttpResponse
from django.core.xheaders import populate_xheaders
from django.core.extensions import DjangoContext
from django.core.paginator import ObjectPaginator, InvalidPage
diff --git a/django/views/generic/simple.py b/django/views/generic/simple.py
index 086ed42805..b9e49db1ac 100644
--- a/django/views/generic/simple.py
+++ b/django/views/generic/simple.py
@@ -1,5 +1,5 @@
from django.core.extensions import DjangoContext, render_to_response
-from django.utils.httpwrappers import HttpResponse, HttpResponsePermanentRedirect, HttpResponseGone
+from django.http import HttpResponse, HttpResponsePermanentRedirect, HttpResponseGone
def direct_to_template(request, template, **kwargs):
"""
diff --git a/django/views/i18n.py b/django/views/i18n.py
index c00273fdcc..f0478994ac 100644
--- a/django/views/i18n.py
+++ b/django/views/i18n.py
@@ -3,7 +3,7 @@ import os
import gettext as gettext_module
-from django.utils import httpwrappers
+from django import http
from django.utils.translation import check_for_language, activate, to_locale, get_language
from django.utils.text import javascript_quote
from django.conf import settings
@@ -20,7 +20,7 @@ def set_language(request):
next = request.META.get('HTTP_REFERER', None)
if not next:
next = '/'
- response = httpwrappers.HttpResponseRedirect(next)
+ response = http.HttpResponseRedirect(next)
if check_for_language(lang_code):
if hasattr(request, 'session'):
request.session['django_language'] = lang_code
@@ -193,5 +193,5 @@ def javascript_catalog(request, domain='djangojs', packages=None):
src.append(LibFoot)
src.append(InterPolate)
src = ''.join(src)
- return httpwrappers.HttpResponse(src, 'text/javascript')
+ return http.HttpResponse(src, 'text/javascript')
diff --git a/django/views/registration/passwords.py b/django/views/registration/passwords.py
index 765168a78e..162f64fc3a 100644
--- a/django/views/registration/passwords.py
+++ b/django/views/registration/passwords.py
@@ -4,7 +4,7 @@ from django.core.template import Context, loader
from django.models.auth import User
from django.models.core import Site
from django.views.decorators.auth import login_required
-from django.utils.httpwrappers import HttpResponseRedirect
+from django.http import HttpResponseRedirect
class PasswordResetForm(formfields.Manipulator):
"A form that lets a user request a password reset"
diff --git a/django/views/static.py b/django/views/static.py
index 01eaec8990..f02e30f584 100644
--- a/django/views/static.py
+++ b/django/views/static.py
@@ -4,7 +4,7 @@ import posixpath
import mimetypes
from django.core import template_loader
from django.core.exceptions import Http404, ImproperlyConfigured
-from django.utils.httpwrappers import HttpResponse, HttpResponseRedirect
+from django.http import HttpResponse, HttpResponseRedirect
from django.core.template import Template, Context, TemplateDoesNotExist
def serve(request, path, document_root=None, show_indexes=False):