mirror of https://github.com/django/django.git
Removed request.REQUEST per deprecation timeline; refs #18659.
This commit is contained in:
parent
61ad1ea92b
commit
75f107b884
|
@ -6,15 +6,12 @@ import logging
|
|||
import sys
|
||||
from io import BytesIO
|
||||
from threading import Lock
|
||||
import warnings
|
||||
|
||||
from django import http
|
||||
from django.conf import settings
|
||||
from django.core import signals
|
||||
from django.core.handlers import base
|
||||
from django.core.urlresolvers import set_script_prefix
|
||||
from django.utils import datastructures
|
||||
from django.utils.deprecation import RemovedInDjango19Warning
|
||||
from django.utils.encoding import force_str, force_text
|
||||
from django.utils.functional import cached_property
|
||||
from django.utils import six
|
||||
|
@ -121,13 +118,6 @@ class WSGIRequest(http.HttpRequest):
|
|||
def _get_scheme(self):
|
||||
return self.environ.get('wsgi.url_scheme')
|
||||
|
||||
def _get_request(self):
|
||||
warnings.warn('`request.REQUEST` is deprecated, use `request.GET` or '
|
||||
'`request.POST` instead.', RemovedInDjango19Warning, 2)
|
||||
if not hasattr(self, '_request'):
|
||||
self._request = datastructures.MergeDict(self.POST, self.GET)
|
||||
return self._request
|
||||
|
||||
@cached_property
|
||||
def GET(self):
|
||||
# The WSGI spec says 'QUERY_STRING' may be absent.
|
||||
|
@ -154,7 +144,6 @@ class WSGIRequest(http.HttpRequest):
|
|||
|
||||
POST = property(_get_post, _set_post)
|
||||
FILES = property(_get_files)
|
||||
REQUEST = property(_get_request)
|
||||
|
||||
|
||||
class WSGIHandler(base.BaseHandler):
|
||||
|
|
|
@ -108,21 +108,6 @@ All attributes should be considered read-only, unless stated otherwise below.
|
|||
|
||||
Note: ``POST`` does *not* include file-upload information. See ``FILES``.
|
||||
|
||||
.. attribute:: HttpRequest.REQUEST
|
||||
|
||||
.. deprecated:: 1.7
|
||||
Use the more explicit ``GET`` and ``POST`` instead.
|
||||
|
||||
For convenience, a dictionary-like object that searches ``POST`` first,
|
||||
then ``GET``. Inspired by PHP's ``$_REQUEST``.
|
||||
|
||||
For example, if ``GET = {"name": "john"}`` and ``POST = {"age": '34'}``,
|
||||
``REQUEST["name"]`` would be ``"john"``, and ``REQUEST["age"]`` would be
|
||||
``"34"``.
|
||||
|
||||
It's strongly suggested that you use ``GET`` and ``POST`` instead of
|
||||
``REQUEST``, because the former are more explicit.
|
||||
|
||||
.. attribute:: HttpRequest.COOKIES
|
||||
|
||||
A standard Python dictionary containing all cookies. Keys and values are
|
||||
|
|
|
@ -130,12 +130,11 @@ view; it'll apply response middleware to that
|
|||
|
||||
.. note::
|
||||
|
||||
Accessing :attr:`request.POST <django.http.HttpRequest.POST>` or
|
||||
:attr:`request.REQUEST <django.http.HttpRequest.REQUEST>` inside middleware
|
||||
from ``process_request`` or ``process_view`` will prevent any view running
|
||||
after the middleware from being able to :ref:`modify the upload handlers
|
||||
for the request <modifying_upload_handlers_on_the_fly>`, and should
|
||||
normally be avoided.
|
||||
Accessing :attr:`request.POST <django.http.HttpRequest.POST>` inside
|
||||
middleware from ``process_request`` or ``process_view`` will prevent any
|
||||
view running after the middleware from being able to :ref:`modify the
|
||||
upload handlers for the request <modifying_upload_handlers_on_the_fly>`,
|
||||
and should normally be avoided.
|
||||
|
||||
The :class:`~django.middleware.csrf.CsrfViewMiddleware` class can be
|
||||
considered an exception, as it provides the
|
||||
|
|
|
@ -4,7 +4,7 @@ import os
|
|||
import unittest
|
||||
import warnings
|
||||
|
||||
from django.test import SimpleTestCase, RequestFactory, override_settings
|
||||
from django.test import SimpleTestCase, override_settings
|
||||
from django.test.utils import reset_warning_registry
|
||||
from django.utils import six, translation
|
||||
from django.utils.deprecation import RenameMethodsBase
|
||||
|
@ -175,26 +175,6 @@ class RenameMethodsTests(SimpleTestCase):
|
|||
])
|
||||
|
||||
|
||||
class DeprecatingRequestMergeDictTest(SimpleTestCase):
|
||||
def test_deprecated_request(self):
|
||||
"""
|
||||
Ensure the correct warning is raised when WSGIRequest.REQUEST is
|
||||
accessed.
|
||||
"""
|
||||
reset_warning_registry()
|
||||
with warnings.catch_warnings(record=True) as recorded:
|
||||
warnings.simplefilter('always')
|
||||
request = RequestFactory().get('/')
|
||||
request.REQUEST # evaluate
|
||||
|
||||
msgs = [str(warning.message) for warning in recorded]
|
||||
self.assertEqual(msgs, [
|
||||
'`request.REQUEST` is deprecated, use `request.GET` or '
|
||||
'`request.POST` instead.',
|
||||
'`MergeDict` is deprecated, use `dict.update()` instead.',
|
||||
])
|
||||
|
||||
|
||||
@override_settings(USE_I18N=True)
|
||||
class DeprecatedChineseLanguageCodes(SimpleTestCase):
|
||||
def test_deprecation_warning(self):
|
||||
|
|
|
@ -953,14 +953,12 @@ class zzUrlconfSubstitutionTests(TestCase):
|
|||
class ContextTests(TestCase):
|
||||
fixtures = ['testdata']
|
||||
|
||||
@ignore_warnings(category=RemovedInDjango19Warning) # `request.REQUEST` is deprecated
|
||||
def test_single_context(self):
|
||||
"Context variables can be retrieved from a single context"
|
||||
response = self.client.get("/request_data/", data={'foo': 'whiz'})
|
||||
self.assertEqual(response.context.__class__, Context)
|
||||
self.assertIn('get-foo', response.context)
|
||||
self.assertEqual(response.context['get-foo'], 'whiz')
|
||||
self.assertEqual(response.context['request-foo'], 'whiz')
|
||||
self.assertEqual(response.context['data'], 'sausage')
|
||||
|
||||
try:
|
||||
|
@ -969,7 +967,6 @@ class ContextTests(TestCase):
|
|||
except KeyError as e:
|
||||
self.assertEqual(e.args[0], 'does-not-exist')
|
||||
|
||||
@ignore_warnings(category=RemovedInDjango19Warning) # `request.REQUEST` is deprecated
|
||||
def test_inherited_context(self):
|
||||
"Context variables can be retrieved from a list of contexts"
|
||||
response = self.client.get("/request_data_extended/", data={'foo': 'whiz'})
|
||||
|
@ -977,7 +974,6 @@ class ContextTests(TestCase):
|
|||
self.assertEqual(len(response.context), 2)
|
||||
self.assertIn('get-foo', response.context)
|
||||
self.assertEqual(response.context['get-foo'], 'whiz')
|
||||
self.assertEqual(response.context['request-foo'], 'whiz')
|
||||
self.assertEqual(response.context['data'], 'bacon')
|
||||
|
||||
try:
|
||||
|
@ -1252,7 +1248,6 @@ class RequestMethodStringDataTests(TestCase):
|
|||
@override_settings(ROOT_URLCONF='test_client_regress.urls',)
|
||||
class QueryStringTests(TestCase):
|
||||
|
||||
@ignore_warnings(category=RemovedInDjango19Warning) # `request.REQUEST` is deprecated
|
||||
def test_get_like_requests(self):
|
||||
# See: https://code.djangoproject.com/ticket/10571.
|
||||
for method_name in ('get', 'head'):
|
||||
|
@ -1260,25 +1255,19 @@ class QueryStringTests(TestCase):
|
|||
method = getattr(self.client, method_name)
|
||||
response = method("/request_data/", data={'foo': 'whiz'})
|
||||
self.assertEqual(response.context['get-foo'], 'whiz')
|
||||
self.assertEqual(response.context['request-foo'], 'whiz')
|
||||
|
||||
# A GET-like request can pass a query string as part of the URL
|
||||
response = method("/request_data/?foo=whiz")
|
||||
self.assertEqual(response.context['get-foo'], 'whiz')
|
||||
self.assertEqual(response.context['request-foo'], 'whiz')
|
||||
|
||||
# Data provided in the URL to a GET-like request is overridden by actual form data
|
||||
response = method("/request_data/?foo=whiz", data={'foo': 'bang'})
|
||||
self.assertEqual(response.context['get-foo'], 'bang')
|
||||
self.assertEqual(response.context['request-foo'], 'bang')
|
||||
|
||||
response = method("/request_data/?foo=whiz", data={'bar': 'bang'})
|
||||
self.assertEqual(response.context['get-foo'], None)
|
||||
self.assertEqual(response.context['get-bar'], 'bang')
|
||||
self.assertEqual(response.context['request-foo'], None)
|
||||
self.assertEqual(response.context['request-bar'], 'bang')
|
||||
|
||||
@ignore_warnings(category=RemovedInDjango19Warning) # `request.REQUEST` is deprecated
|
||||
def test_post_like_requests(self):
|
||||
# A POST-like request can pass a query string as data
|
||||
response = self.client.post("/request_data/", data={'foo': 'whiz'})
|
||||
|
@ -1289,21 +1278,17 @@ class QueryStringTests(TestCase):
|
|||
response = self.client.post("/request_data/?foo=whiz")
|
||||
self.assertEqual(response.context['get-foo'], 'whiz')
|
||||
self.assertEqual(response.context['post-foo'], None)
|
||||
self.assertEqual(response.context['request-foo'], 'whiz')
|
||||
|
||||
# POST data provided in the URL augments actual form data
|
||||
response = self.client.post("/request_data/?foo=whiz", data={'foo': 'bang'})
|
||||
self.assertEqual(response.context['get-foo'], 'whiz')
|
||||
self.assertEqual(response.context['post-foo'], 'bang')
|
||||
self.assertEqual(response.context['request-foo'], 'bang')
|
||||
|
||||
response = self.client.post("/request_data/?foo=whiz", data={'bar': 'bang'})
|
||||
self.assertEqual(response.context['get-foo'], 'whiz')
|
||||
self.assertEqual(response.context['get-bar'], None)
|
||||
self.assertEqual(response.context['post-foo'], None)
|
||||
self.assertEqual(response.context['post-bar'], 'bang')
|
||||
self.assertEqual(response.context['request-foo'], 'whiz')
|
||||
self.assertEqual(response.context['request-bar'], 'bang')
|
||||
|
||||
|
||||
@override_settings(ROOT_URLCONF='test_client_regress.urls')
|
||||
|
|
|
@ -38,17 +38,11 @@ get_view = login_required(get_view)
|
|||
|
||||
def request_data(request, template='base.html', data='sausage'):
|
||||
"A simple view that returns the request data in the context"
|
||||
|
||||
request_foo = request.REQUEST.get('foo')
|
||||
request_bar = request.REQUEST.get('bar')
|
||||
|
||||
return render_to_response(template, {
|
||||
'get-foo': request.GET.get('foo'),
|
||||
'get-bar': request.GET.get('bar'),
|
||||
'post-foo': request.POST.get('foo'),
|
||||
'post-bar': request.POST.get('bar'),
|
||||
'request-foo': request_foo,
|
||||
'request-bar': request_bar,
|
||||
'data': data,
|
||||
})
|
||||
|
||||
|
|
Loading…
Reference in New Issue