Browse Source

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

Krzysztof Jurewicz 12 years ago
parent
commit
ee8b810b97

+ 4 - 1
django/views/generic/base.py

@@ -30,7 +30,7 @@ class View(object):
     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):
         """
@@ -206,3 +206,6 @@ class RedirectView(View):
 
     def put(self, request, *args, **kwargs):
         return self.get(request, *args, **kwargs)
+
+    def patch(self, request, *args, **kwargs):
+        return self.get(request, *args, **kwargs)

+ 1 - 1
docs/ref/class-based-views/base.txt

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

+ 3 - 0
docs/releases/1.6.txt

@@ -258,6 +258,9 @@ Minor features
   methods returning the first or last object matching the filters. Returns
   ``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
 =====================================
 

+ 6 - 0
tests/generic_views/test_base.py

@@ -384,6 +384,12 @@ class RedirectViewTest(unittest.TestCase):
         self.assertEqual(response.status_code, 301)
         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):
         "Default is a permanent redirect"
         response = RedirectView.as_view(url='/bar/')(self.rf.delete('/foo/'))