尝试通过python requests
以及命令行cURL提交PATCH请求,我得到以下回复:
>>> r = requests.patch(url)
>>> r.text
u'{"error_message": "PATCH",
"traceback": "Traceback (most recent call last):
File "/usr/local/Cellar/python/2.7.8_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/tastypie/resources.py", line 201, in wrapper
response = callback(request, *args, **kwargs)
File "/usr/local/Cellar/python/2.7.8_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/tastypie/resources.py", line 441, in dispatch_detail
return self.dispatch('detail', request, **kwargs)
File "/usr/local/Cellar/python/2.7.8_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django_tastypie_mongoengine-0.4.5-py2.7.egg/tastypie_mongoengine/resources.py", line 385, in dispatch
assert request.method.lower() not in ('put', 'post', 'patch'), request.method
AssertionError: PATCH"}'
>>> r.request.method.lower()
'patch'
>>>
不确定我是否遗漏了某些东西,但看起来PATCH方法在列表中并且断言不应该触发。它甚至没有足够的证据来验证这个补丁'是资源的允许方法,它是:
allowed_methods = ('get', 'post', 'patch')
更新:POST导致同样的问题!这段代码在一两个星期之前适用于POST,并且没有对它进行任何更改。最近唯一被改变的东西(OSX笔记本电脑)是最新一轮的操作系统补丁。我还注意到我回复的这个github问题:https://github.com/wlanslovenija/django-tastypie-mongoengine/issues/91。不确定是否存在同样的问题(POST应该允许请求正文,所以我不知道)。
答案 0 :(得分:1)
原来问题是POST和PATCH都需要在正文中传递一些数据,而其他数据需要在URL参数中传递。