mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-08 06:14:47 +03:00
Check for SUPPORT_PATCH in partial_update
This commit is contained in:
parent
1402f51327
commit
d322c3fa4b
|
@ -229,7 +229,6 @@ class UpdateAPIView(mixins.UpdateModelMixin,
|
||||||
def put(self, request, *args, **kwargs):
|
def put(self, request, *args, **kwargs):
|
||||||
return self.update(request, *args, **kwargs)
|
return self.update(request, *args, **kwargs)
|
||||||
|
|
||||||
if api_settings.SUPPORT_PATCH:
|
|
||||||
def patch(self, request, *args, **kwargs):
|
def patch(self, request, *args, **kwargs):
|
||||||
return self.partial_update(request, *args, **kwargs)
|
return self.partial_update(request, *args, **kwargs)
|
||||||
|
|
||||||
|
@ -259,7 +258,6 @@ class RetrieveUpdateAPIView(mixins.RetrieveModelMixin,
|
||||||
def put(self, request, *args, **kwargs):
|
def put(self, request, *args, **kwargs):
|
||||||
return self.update(request, *args, **kwargs)
|
return self.update(request, *args, **kwargs)
|
||||||
|
|
||||||
if api_settings.SUPPORT_PATCH:
|
|
||||||
def patch(self, request, *args, **kwargs):
|
def patch(self, request, *args, **kwargs):
|
||||||
return self.partial_update(request, *args, **kwargs)
|
return self.partial_update(request, *args, **kwargs)
|
||||||
|
|
||||||
|
@ -290,7 +288,6 @@ class RetrieveUpdateDestroyAPIView(mixins.RetrieveModelMixin,
|
||||||
def put(self, request, *args, **kwargs):
|
def put(self, request, *args, **kwargs):
|
||||||
return self.update(request, *args, **kwargs)
|
return self.update(request, *args, **kwargs)
|
||||||
|
|
||||||
if api_settings.SUPPORT_PATCH:
|
|
||||||
def patch(self, request, *args, **kwargs):
|
def patch(self, request, *args, **kwargs):
|
||||||
return self.partial_update(request, *args, **kwargs)
|
return self.partial_update(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ which allows mixin classes to be composed in interesting ways.
|
||||||
"""
|
"""
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from rest_framework import status
|
from rest_framework import exceptions, status
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.settings import api_settings
|
from rest_framework.settings import api_settings
|
||||||
|
|
||||||
|
@ -74,6 +74,9 @@ class UpdateModelMixin(object):
|
||||||
serializer.save()
|
serializer.save()
|
||||||
|
|
||||||
def partial_update(self, request, *args, **kwargs):
|
def partial_update(self, request, *args, **kwargs):
|
||||||
|
if not api_settings.SUPPORT_PATCH:
|
||||||
|
raise exceptions.MethodNotAllowed(request.method)
|
||||||
|
|
||||||
kwargs['partial'] = True
|
kwargs['partial'] = True
|
||||||
return self.update(request, *args, **kwargs)
|
return self.update(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
|
@ -4,11 +4,10 @@ import django
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.test.utils import override_settings
|
|
||||||
from django.utils import six
|
from django.utils import six
|
||||||
from django.utils.six.moves import reload_module
|
|
||||||
|
|
||||||
from rest_framework import generics, renderers, serializers, status
|
from rest_framework import generics, renderers, serializers, status
|
||||||
|
from rest_framework.settings import api_settings
|
||||||
from rest_framework.test import APIRequestFactory
|
from rest_framework.test import APIRequestFactory
|
||||||
from tests.models import (
|
from tests.models import (
|
||||||
BasicModel, ForeignKeySource, ForeignKeyTarget, RESTFrameworkModel
|
BasicModel, ForeignKeySource, ForeignKeyTarget, RESTFrameworkModel
|
||||||
|
@ -516,15 +515,19 @@ class TestSupportPatchSetting(TestCase):
|
||||||
"""
|
"""
|
||||||
PATCH requests should fail when SUPPORT_PATCH is set to False.
|
PATCH requests should fail when SUPPORT_PATCH is set to False.
|
||||||
"""
|
"""
|
||||||
with override_settings(REST_FRAMEWORK={'SUPPORT_PATCH': False}):
|
obj = BasicModel.objects.create(text='abc')
|
||||||
reload_module(generics)
|
|
||||||
data = {'text': 'foobar'}
|
|
||||||
request = factory.patch('/1', data, format='json')
|
|
||||||
|
|
||||||
class InstanceView(generics.UpdateAPIView):
|
class InstanceView(generics.UpdateAPIView):
|
||||||
queryset = BasicModel.objects.all()
|
queryset = BasicModel.objects.all()
|
||||||
serializer_class = BasicSerializer
|
serializer_class = BasicSerializer
|
||||||
|
|
||||||
|
api_settings.SUPPORT_PATCH = False
|
||||||
|
|
||||||
|
data = {'text': 'foobar'}
|
||||||
|
request = factory.patch('/1', data, format='json')
|
||||||
view = InstanceView.as_view()
|
view = InstanceView.as_view()
|
||||||
response = view(request, pk=1).render()
|
response = view(request, pk=obj.pk).render()
|
||||||
|
|
||||||
|
api_settings.SUPPORT_PATCH = True
|
||||||
|
|
||||||
self.assertEqual(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)
|
self.assertEqual(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user