mirror of
https://github.com/django/django.git
synced 2025-11-07 07:15:35 +00:00
Fixed #26601 -- Improved middleware per DEP 0005.
Thanks Tim Graham for polishing the patch, updating the tests, and writing documentation. Thanks Carl Meyer for shepherding the DEP.
This commit is contained in:
committed by
Tim Graham
parent
05c888ffb8
commit
9baf692a58
@@ -15,7 +15,7 @@ class CsrfViewTests(SimpleTestCase):
|
||||
|
||||
@override_settings(
|
||||
USE_I18N=True,
|
||||
MIDDLEWARE_CLASSES=[
|
||||
MIDDLEWARE=[
|
||||
'django.middleware.locale.LocaleMiddleware',
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
@@ -38,6 +38,32 @@ class CsrfViewTests(SimpleTestCase):
|
||||
"CSRF-verificatie mislukt. Verzoek afgebroken.",
|
||||
status_code=403)
|
||||
|
||||
@override_settings(
|
||||
USE_I18N=True,
|
||||
MIDDLEWARE=None,
|
||||
MIDDLEWARE_CLASSES=[
|
||||
'django.middleware.locale.LocaleMiddleware',
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
],
|
||||
)
|
||||
def test_translation_middleware_classes(self):
|
||||
"""
|
||||
Test that an invalid request is rejected with a localized error message.
|
||||
"""
|
||||
response = self.client.post('/')
|
||||
self.assertContains(response, "Forbidden", status_code=403)
|
||||
self.assertContains(response,
|
||||
"CSRF verification failed. Request aborted.",
|
||||
status_code=403)
|
||||
|
||||
with self.settings(LANGUAGE_CODE='nl'), override('en-us'):
|
||||
response = self.client.post('/')
|
||||
self.assertContains(response, "Verboden", status_code=403)
|
||||
self.assertContains(response,
|
||||
"CSRF-verificatie mislukt. Verzoek afgebroken.",
|
||||
status_code=403)
|
||||
|
||||
@override_settings(
|
||||
SECURE_PROXY_SSL_HEADER=('HTTP_X_FORWARDED_PROTO', 'https')
|
||||
)
|
||||
|
||||
@@ -123,6 +123,26 @@ class I18NTests(TestCase):
|
||||
# we force saving language to a cookie rather than a session
|
||||
# by excluding session middleware and those which do require it
|
||||
test_settings = dict(
|
||||
MIDDLEWARE=['django.middleware.common.CommonMiddleware'],
|
||||
LANGUAGE_COOKIE_NAME='mylanguage',
|
||||
LANGUAGE_COOKIE_AGE=3600 * 7 * 2,
|
||||
LANGUAGE_COOKIE_DOMAIN='.example.com',
|
||||
LANGUAGE_COOKIE_PATH='/test/',
|
||||
)
|
||||
with self.settings(**test_settings):
|
||||
post_data = dict(language='pl', next='/views/')
|
||||
response = self.client.post('/i18n/setlang/', data=post_data)
|
||||
language_cookie = response.cookies.get('mylanguage')
|
||||
self.assertEqual(language_cookie.value, 'pl')
|
||||
self.assertEqual(language_cookie['domain'], '.example.com')
|
||||
self.assertEqual(language_cookie['path'], '/test/')
|
||||
self.assertEqual(language_cookie['max-age'], 3600 * 7 * 2)
|
||||
|
||||
def test_setlang_cookie_middleware_classes(self):
|
||||
# we force saving language to a cookie rather than a session
|
||||
# by excluding session middleware and those which do require it
|
||||
test_settings = dict(
|
||||
MIDDLEWARE=None,
|
||||
MIDDLEWARE_CLASSES=['django.middleware.common.CommonMiddleware'],
|
||||
LANGUAGE_COOKIE_NAME='mylanguage',
|
||||
LANGUAGE_COOKIE_AGE=3600 * 7 * 2,
|
||||
@@ -150,7 +170,7 @@ class I18NTests(TestCase):
|
||||
self.assertRedirects(response, encoded_url, fetch_redirect_response=False)
|
||||
self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code)
|
||||
|
||||
@modify_settings(MIDDLEWARE_CLASSES={
|
||||
@modify_settings(MIDDLEWARE={
|
||||
'append': 'django.middleware.locale.LocaleMiddleware',
|
||||
})
|
||||
def test_lang_from_translated_i18n_pattern(self):
|
||||
@@ -167,6 +187,27 @@ class I18NTests(TestCase):
|
||||
)
|
||||
self.assertRedirects(response, '/en/translated/')
|
||||
|
||||
@override_settings(
|
||||
MIDDLEWARE=None,
|
||||
MIDDLEWARE_CLASSES=[
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'django.middleware.locale.LocaleMiddleware',
|
||||
],
|
||||
)
|
||||
def test_lang_from_translated_i18n_pattern_middleware_classes(self):
|
||||
response = self.client.post(
|
||||
'/i18n/setlang/', data={'language': 'nl'},
|
||||
follow=True, HTTP_REFERER='/en/translated/'
|
||||
)
|
||||
self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], 'nl')
|
||||
self.assertRedirects(response, '/nl/vertaald/')
|
||||
# And reverse
|
||||
response = self.client.post(
|
||||
'/i18n/setlang/', data={'language': 'en'},
|
||||
follow=True, HTTP_REFERER='/nl/vertaald/'
|
||||
)
|
||||
self.assertRedirects(response, '/en/translated/')
|
||||
|
||||
|
||||
@override_settings(ROOT_URLCONF='view_tests.urls')
|
||||
class JsI18NTests(SimpleTestCase):
|
||||
|
||||
Reference in New Issue
Block a user