mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
MERGED MAGIC-REMOVAL BRANCH TO TRUNK. This change is highly backwards-incompatible. Please read http://code.djangoproject.com/wiki/RemovingTheMagic for upgrade instructions.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@2809 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -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:
|
||||
"""
|
||||
|
||||
@@ -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,10 +27,11 @@ 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('<h1>Forbidden</h1>')
|
||||
return http.HttpResponseForbidden('<h1>Forbidden</h1>')
|
||||
|
||||
# Check for a redirect based on settings.APPEND_SLASH and settings.PREPEND_WWW
|
||||
old_url = [request.META.get('HTTP_HOST', ''), request.path]
|
||||
host = http.get_host(request)
|
||||
old_url = [host, request.path]
|
||||
new_url = old_url[:]
|
||||
if settings.PREPEND_WWW and old_url[0] and not old_url[0].startswith('www.'):
|
||||
new_url[0] = 'www.' + old_url[0]
|
||||
@@ -46,7 +47,7 @@ class CommonMiddleware:
|
||||
newurl = new_url[1]
|
||||
if request.GET:
|
||||
newurl += '?' + request.GET.urlencode()
|
||||
return httpwrappers.HttpResponsePermanentRedirect(newurl)
|
||||
return http.HttpResponsePermanentRedirect(newurl)
|
||||
|
||||
return None
|
||||
|
||||
@@ -56,7 +57,7 @@ class CommonMiddleware:
|
||||
if settings.SEND_BROKEN_LINK_EMAILS:
|
||||
# If the referrer was from an internal link or a non-search-engine site,
|
||||
# send a note to the managers.
|
||||
domain = request.META['HTTP_HOST']
|
||||
domain = http.get_host(request)
|
||||
referer = request.META.get('HTTP_REFERER', None)
|
||||
is_internal = referer and (domain in referer)
|
||||
path = request.get_full_path()
|
||||
@@ -69,7 +70,7 @@ class CommonMiddleware:
|
||||
if settings.USE_ETAGS:
|
||||
etag = md5.new(response.content).hexdigest()
|
||||
if request.META.get('HTTP_IF_NONE_MATCH') == etag:
|
||||
response = httpwrappers.HttpResponseNotModified()
|
||||
response = http.HttpResponseNotModified()
|
||||
else:
|
||||
response['ETag'] = etag
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
from django.conf.settings import SESSION_COOKIE_NAME, SESSION_COOKIE_AGE, SESSION_COOKIE_DOMAIN, SESSION_SAVE_EVERY_REQUEST
|
||||
from django.models.core import sessions
|
||||
from django.utils.cache import patch_vary_headers
|
||||
import datetime
|
||||
|
||||
TEST_COOKIE_NAME = 'testcookie'
|
||||
TEST_COOKIE_VALUE = 'worked'
|
||||
|
||||
class SessionWrapper(object):
|
||||
def __init__(self, session_key):
|
||||
self.session_key = session_key
|
||||
self.modified = False
|
||||
|
||||
def __contains__(self, key):
|
||||
return key in self._session
|
||||
|
||||
def __getitem__(self, key):
|
||||
return self._session[key]
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
self._session[key] = value
|
||||
self.modified = True
|
||||
|
||||
def __delitem__(self, key):
|
||||
del self._session[key]
|
||||
self.modified = True
|
||||
|
||||
def keys(self):
|
||||
return self._session.keys()
|
||||
|
||||
def items(self):
|
||||
return self._session.items()
|
||||
|
||||
def get(self, key, default=None):
|
||||
return self._session.get(key, default)
|
||||
|
||||
def set_test_cookie(self):
|
||||
self[TEST_COOKIE_NAME] = TEST_COOKIE_VALUE
|
||||
|
||||
def test_cookie_worked(self):
|
||||
return self.get(TEST_COOKIE_NAME) == TEST_COOKIE_VALUE
|
||||
|
||||
def delete_test_cookie(self):
|
||||
del self[TEST_COOKIE_NAME]
|
||||
|
||||
def _get_session(self):
|
||||
# Lazily loads session from storage.
|
||||
try:
|
||||
return self._session_cache
|
||||
except AttributeError:
|
||||
if self.session_key is None:
|
||||
self._session_cache = {}
|
||||
else:
|
||||
try:
|
||||
s = sessions.get_object(session_key__exact=self.session_key,
|
||||
expire_date__gt=datetime.datetime.now())
|
||||
self._session_cache = s.get_decoded()
|
||||
except sessions.SessionDoesNotExist:
|
||||
self._session_cache = {}
|
||||
# Set the session_key to None to force creation of a new
|
||||
# key, for extra security.
|
||||
self.session_key = None
|
||||
return self._session_cache
|
||||
|
||||
_session = property(_get_session)
|
||||
|
||||
class SessionMiddleware:
|
||||
def process_request(self, request):
|
||||
request.session = SessionWrapper(request.COOKIES.get(SESSION_COOKIE_NAME, None))
|
||||
|
||||
def process_response(self, request, response):
|
||||
# If request.session was modified, or if response.session was set, save
|
||||
# those changes and set a session cookie.
|
||||
patch_vary_headers(response, ('Cookie',))
|
||||
try:
|
||||
modified = request.session.modified
|
||||
except AttributeError:
|
||||
pass
|
||||
else:
|
||||
if modified or SESSION_SAVE_EVERY_REQUEST:
|
||||
session_key = request.session.session_key or sessions.get_new_session_key()
|
||||
new_session = sessions.save(session_key, request.session._session,
|
||||
datetime.datetime.now() + datetime.timedelta(seconds=SESSION_COOKIE_AGE))
|
||||
expires = datetime.datetime.strftime(datetime.datetime.utcnow() + datetime.timedelta(seconds=SESSION_COOKIE_AGE), "%a, %d-%b-%Y %H:%M:%S GMT")
|
||||
response.set_cookie(SESSION_COOKIE_NAME, session_key,
|
||||
max_age=SESSION_COOKIE_AGE, expires=expires, domain=SESSION_COOKIE_DOMAIN)
|
||||
return response
|
||||
28
django/middleware/transaction.py
Normal file
28
django/middleware/transaction.py
Normal file
@@ -0,0 +1,28 @@
|
||||
from django.conf import settings
|
||||
from django.db import transaction
|
||||
|
||||
class TransactionMiddleware:
|
||||
"""
|
||||
Transaction middleware. If this is enabled, each view function will be run
|
||||
with commit_on_response activated - that way a save() doesn't do a direct
|
||||
commit, the commit is done when a successful response is created. If an
|
||||
exception happens, the database is rolled back.
|
||||
"""
|
||||
def process_request(self, request):
|
||||
"""Enters transaction management"""
|
||||
transaction.enter_transaction_management()
|
||||
transaction.managed(True)
|
||||
|
||||
def process_exception(self, request, exception):
|
||||
"""Rolls back the database and leaves transaction management"""
|
||||
if transaction.is_dirty():
|
||||
transaction.rollback()
|
||||
transaction.leave_transaction_management()
|
||||
|
||||
def process_response(self, request, response):
|
||||
"""Commits and leaves transaction management."""
|
||||
if transaction.is_managed():
|
||||
if transaction.is_dirty():
|
||||
transaction.commit()
|
||||
transaction.leave_transaction_management()
|
||||
return response
|
||||
Reference in New Issue
Block a user