Fixed #20478 – Added support for HTTP PATCH method in generic views.

This commit is contained in:
Krzysztof Jurewicz 2013-05-21 18:01:29 +02:00
parent 0e51d8eb66
commit ee8b810b97
4 changed files with 14 additions and 2 deletions

View File

@ -30,7 +30,7 @@ class View(object):
dispatch-by-method and simple sanity checking. dispatch-by-method and simple sanity checking.
""" """
http_method_names = ['get', 'post', 'put', 'delete', 'head', 'options', 'trace'] http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
def __init__(self, **kwargs): def __init__(self, **kwargs):
""" """
@ -206,3 +206,6 @@ class RedirectView(View):
def put(self, request, *args, **kwargs): def put(self, request, *args, **kwargs):
return self.get(request, *args, **kwargs) return self.get(request, *args, **kwargs)
def patch(self, request, *args, **kwargs):
return self.get(request, *args, **kwargs)

View File

@ -55,7 +55,7 @@ View
Default:: Default::
['get', 'post', 'put', 'delete', 'head', 'options', 'trace'] ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
**Methods** **Methods**

View File

@ -258,6 +258,9 @@ Minor features
methods returning the first or last object matching the filters. Returns methods returning the first or last object matching the filters. Returns
``None`` if there are no objects matching. ``None`` if there are no objects matching.
* :class:`~django.views.generic.base.View` and
:class:`~django.views.generic.base.RedirectView` now support HTTP PATCH method.
Backwards incompatible changes in 1.6 Backwards incompatible changes in 1.6
===================================== =====================================

View File

@ -384,6 +384,12 @@ class RedirectViewTest(unittest.TestCase):
self.assertEqual(response.status_code, 301) self.assertEqual(response.status_code, 301)
self.assertEqual(response.url, '/bar/') self.assertEqual(response.url, '/bar/')
def test_redirect_PATCH(self):
"Default is a permanent redirect"
response = RedirectView.as_view(url='/bar/')(self.rf.patch('/foo/'))
self.assertEqual(response.status_code, 301)
self.assertEqual(response.url, '/bar/')
def test_redirect_DELETE(self): def test_redirect_DELETE(self):
"Default is a permanent redirect" "Default is a permanent redirect"
response = RedirectView.as_view(url='/bar/')(self.rf.delete('/foo/')) response = RedirectView.as_view(url='/bar/')(self.rf.delete('/foo/'))