我正在Django和Tasty Pie上构建一个RESTful应用程序。我有PUT和POST方法的问题。当我通过Curl做请求时,我有一个错误。
卷曲请求:
curl -i -H "Content-Type :application/json" -X POST -d '{"site_id":2,"post":2}' --user log:pass http://domain.com/core/api/v1/bookmarklet_post/
curl -i -H "Content-Type :application/json" -X PUT -d '{"site_id":2,"post":2}' --user log:pass http://domain.com/core/api/v1/bookmarklet_post/
错误:
{"error_message": "The format indicated 'application/x-www-form-urlencoded' had no
available deserialization method. Please check your ``formats`` and ``content_types`` on
your Serializer.", "traceback": "Traceback (most recent call last):\n\n File
\"/home/ilya/envs/rebelmouse/lib/python2.7/site-packages/tastypie/resources.py\", line
178, in wrapper\n response = callback(request, *args, **kwargs)\n\n File
\"/home/ilya/envs/rebelmouse/lib/python2.7/site-packages/tastypie/resources.py\", line
379, in dispatch_list\n return self.dispatch('list', request, **kwargs)\n\n File
\"/home/ilya/envs/rebelmouse/lib/python2.7/site-packages/tastypie/resources.py\", line
409, in dispatch\n response = method(request, **kwargs)\n\n File
\"/home/ilya/envs/rebelmouse/lib/python2.7/site-packages/tastypie/resources.py\", line
1020, in put_list\n deserialized = self.deserialize(request, request.raw_post_data,
format=request.META.get('CONTENT_TYPE', 'application/json'))\n\n File
\"/home/ilya/envs/rebelmouse/lib/python2.7/site-packages/tastypie/resources.py\", line
328, in deserialize\n deserialized = self._meta.serializer.deserialize(data,
format=request.META.get('CONTENT_TYPE', 'application/json'))\n\n File
\"/home/ilya/envs/rebelmouse/lib/python2.7/site-packages/tastypie/serializers.py\", line
159, in deserialize\n raise UnsupportedFormat(\"The format indicated '%s' had no
available deserialization method. Please check your ``formats`` and ``content_types`` on
your Serializer.\" % format)\n\nUnsupportedFormat: The format indicated 'application/x-
www- form-urlencoded' had no available deserialization method. Please check your
``formats`` and ``content_types`` on your Serializer.\n"}
Serializer在我的资源类中实现:
class BookmarkletPostResource(Resource):
site_id = fields.CharField(attribute='site_id')
post = fields.CharField(attribute='post')
class Meta:
resource_name = 'bookmarklet_post'
include_resource_uri = False
limit = 10
default_format = "application/json"
object_class = ProxyStore
authorization = Authorization()
serializer = Serializer()
答案 0 :(得分:18)
内容类型标题冒号放错了位置。
它应该是这样的:-H "Content-Type: application/json"