mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-09 08:00:52 +03:00
Merge pull request #1034 from KrzysiekJ/patch-create-fallback-removal
PATCH requests should not be able to create objects.
This commit is contained in:
commit
110d549404
|
@ -142,11 +142,14 @@ class UpdateModelMixin(object):
|
||||||
try:
|
try:
|
||||||
return self.get_object()
|
return self.get_object()
|
||||||
except Http404:
|
except Http404:
|
||||||
# If this is a PUT-as-create operation, we need to ensure that
|
if self.request.method == 'PUT':
|
||||||
# we have relevant permissions, as if this was a POST request.
|
# For PUT-as-create operation, we need to ensure that we have
|
||||||
# This will either raise a PermissionDenied exception,
|
# relevant permissions, as if this was a POST request. This
|
||||||
# or simply return None
|
# will either raise a PermissionDenied exception, or simply
|
||||||
|
# return None.
|
||||||
self.check_permissions(clone_request(self.request, 'POST'))
|
self.check_permissions(clone_request(self.request, 'POST'))
|
||||||
|
else:
|
||||||
|
raise
|
||||||
|
|
||||||
def pre_save(self, obj):
|
def pre_save(self, obj):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -338,6 +338,17 @@ class TestInstanceView(TestCase):
|
||||||
new_obj = SlugBasedModel.objects.get(slug='test_slug')
|
new_obj = SlugBasedModel.objects.get(slug='test_slug')
|
||||||
self.assertEqual(new_obj.text, 'foobar')
|
self.assertEqual(new_obj.text, 'foobar')
|
||||||
|
|
||||||
|
def test_patch_cannot_create_an_object(self):
|
||||||
|
"""
|
||||||
|
PATCH requests should not be able to create objects.
|
||||||
|
"""
|
||||||
|
data = {'text': 'foobar'}
|
||||||
|
request = factory.patch('/999', data, format='json')
|
||||||
|
with self.assertNumQueries(1):
|
||||||
|
response = self.view(request, pk=999).render()
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
|
||||||
|
self.assertFalse(self.objects.filter(id=999).exists())
|
||||||
|
|
||||||
|
|
||||||
class TestOverriddenGetObject(TestCase):
|
class TestOverriddenGetObject(TestCase):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue
Block a user