mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-02 20:54:42 +03:00
PUT as create should return 201. Fixes #340.
This commit is contained in:
parent
3a99170a73
commit
027c9079f6
|
@ -4,6 +4,10 @@
|
||||||
>
|
>
|
||||||
> — Eric S. Raymond, [The Cathedral and the Bazaar][cite].
|
> — Eric S. Raymond, [The Cathedral and the Bazaar][cite].
|
||||||
|
|
||||||
|
## Master
|
||||||
|
|
||||||
|
* If PUT creates an instance return '201 Created', instead of '200 OK'.
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* **Fix all of the things.** (Well, almost.)
|
* **Fix all of the things.** (Well, almost.)
|
||||||
|
|
|
@ -3,9 +3,6 @@ Basic building blocks for generic class based views.
|
||||||
|
|
||||||
We don't bind behaviour to http method handlers yet,
|
We don't bind behaviour to http method handlers yet,
|
||||||
which allows mixin classes to be composed in interesting ways.
|
which allows mixin classes to be composed in interesting ways.
|
||||||
|
|
||||||
Eg. Use mixins to build a Resource class, and have a Router class
|
|
||||||
perform the binding of http methods to actions for us.
|
|
||||||
"""
|
"""
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
|
@ -78,15 +75,17 @@ class UpdateModelMixin(object):
|
||||||
def update(self, request, *args, **kwargs):
|
def update(self, request, *args, **kwargs):
|
||||||
try:
|
try:
|
||||||
self.object = self.get_object()
|
self.object = self.get_object()
|
||||||
|
success_status = status.HTTP_200_OK
|
||||||
except Http404:
|
except Http404:
|
||||||
self.object = None
|
self.object = None
|
||||||
|
success_status = status.HTTP_201_CREATED
|
||||||
|
|
||||||
serializer = self.get_serializer(data=request.DATA, instance=self.object)
|
serializer = self.get_serializer(data=request.DATA, instance=self.object)
|
||||||
|
|
||||||
if serializer.is_valid():
|
if serializer.is_valid():
|
||||||
self.pre_save(serializer.object)
|
self.pre_save(serializer.object)
|
||||||
self.object = serializer.save()
|
self.object = serializer.save()
|
||||||
return Response(serializer.data)
|
return Response(serializer.data, status=success_status)
|
||||||
|
|
||||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
|
|
|
@ -236,7 +236,7 @@ class TestInstanceView(TestCase):
|
||||||
request = factory.put('/1', json.dumps(content),
|
request = factory.put('/1', json.dumps(content),
|
||||||
content_type='application/json')
|
content_type='application/json')
|
||||||
response = self.view(request, pk=1).render()
|
response = self.view(request, pk=1).render()
|
||||||
self.assertEquals(response.status_code, status.HTTP_200_OK)
|
self.assertEquals(response.status_code, status.HTTP_201_CREATED)
|
||||||
self.assertEquals(response.data, {'id': 1, 'text': 'foobar'})
|
self.assertEquals(response.data, {'id': 1, 'text': 'foobar'})
|
||||||
updated = self.objects.get(id=1)
|
updated = self.objects.get(id=1)
|
||||||
self.assertEquals(updated.text, 'foobar')
|
self.assertEquals(updated.text, 'foobar')
|
||||||
|
@ -251,7 +251,7 @@ class TestInstanceView(TestCase):
|
||||||
request = factory.put('/5', json.dumps(content),
|
request = factory.put('/5', json.dumps(content),
|
||||||
content_type='application/json')
|
content_type='application/json')
|
||||||
response = self.view(request, pk=5).render()
|
response = self.view(request, pk=5).render()
|
||||||
self.assertEquals(response.status_code, status.HTTP_200_OK)
|
self.assertEquals(response.status_code, status.HTTP_201_CREATED)
|
||||||
new_obj = self.objects.get(pk=5)
|
new_obj = self.objects.get(pk=5)
|
||||||
self.assertEquals(new_obj.text, 'foobar')
|
self.assertEquals(new_obj.text, 'foobar')
|
||||||
|
|
||||||
|
@ -264,7 +264,7 @@ class TestInstanceView(TestCase):
|
||||||
request = factory.put('/test_slug', json.dumps(content),
|
request = factory.put('/test_slug', json.dumps(content),
|
||||||
content_type='application/json')
|
content_type='application/json')
|
||||||
response = self.slug_based_view(request, slug='test_slug').render()
|
response = self.slug_based_view(request, slug='test_slug').render()
|
||||||
self.assertEquals(response.status_code, status.HTTP_200_OK)
|
self.assertEquals(response.status_code, status.HTTP_201_CREATED)
|
||||||
self.assertEquals(response.data, {'slug': 'test_slug', 'text': 'foobar'})
|
self.assertEquals(response.data, {'slug': 'test_slug', 'text': 'foobar'})
|
||||||
new_obj = SlugBasedModel.objects.get(slug='test_slug')
|
new_obj = SlugBasedModel.objects.get(slug='test_slug')
|
||||||
self.assertEquals(new_obj.text, 'foobar')
|
self.assertEquals(new_obj.text, 'foobar')
|
||||||
|
|
Loading…
Reference in New Issue
Block a user