0
我在測試客戶端進行API調用:405錯誤時自定義的PATCH方法被稱爲用於Django的REST APIView
response2 = self.client.patch('/object/update/%d/' %
object_id, {'object_attribute':4})
該對象的相關串行和視圖類:
class ObjectUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = Object
include=('object_attribte','another_attribute',)
class ObjectView(APIView):
def patch(self, request, pk, format=None):
obj = Object.objects.get(id=pk)
data = request.data.copy()
"""do some stuff with the data here..."""
serializer = ObjectUpdateSerializer(instance = obj, data=data,
partial=True)
if serializer.is_valid(raise_exception=True):
serializer.save()
return Response(serializer.data,status.HTTP_200_OK)
當我使用PUT方法時,我能夠使用它,但我希望API調用方法更符合方法的實際含義(因此PATCH將是部分替換)。但是,對上面的測試客戶端調用的響應是這樣的:
{u'detail': u'Method "PATCH" not allowed.'}
這是405錯誤(方法不允許)。
我檢查,看看是否有使用Django 1.10的任何問題,我也有這個輸出Django的外殼:
>>> from django.views.generic import View
>>> View.http_method_names
[u'get', u'post', u'put', u'patch', u'delete', u'head', u'options', u'trace']
它看起來好像是不Django的設置的問題,但我已經設置了一些東西。這裏可能是什麼問題?
我猜你發送補丁請求到錯誤的URL。我們能否看到客戶端代碼或最好是一個顯示錯誤的'curl'命令。 –
當我用「put」替換「patch」時,該方法起作用,即 'def patch(...) - > def put(...)'和 'self.client.patch - > self。 client.put' –
該測試很有趣,但它不能提供足夠的信息來幫助我。嘗試瀏覽[Browsable API](http://www.django-rest-framework.org/topics/browsable-api/#urls)並查看DRF在您的API視圖中啓用了哪些HTTP請求。 –