我有点难以弄清楚我的下一步应该是什么。我正在使用tastepie 为我的Web 应用程序创建一个API。
从另一个应用程序,特别是 ifbyphone.com,我收到一个没有标题的 POST,看起来像这样:
post data:http://myapp.com/api/
callerid=1&someid=2&number=3&result=Answered&phoneid=4
现在,我在我的服务器日志中看到这正在击中我的服务器。但美味派抱怨 POST 的格式。
{“error_message”:“指示的格式 'application/x-www-form-urlencoded' 没有可用的反序列化方法。请检查您的
formats
和content_types
在您的序列化器上。”,“traceback”:“回溯(最近一次调用最后一次):\ n\n 文件\"/usr/local/lib/python2.7/dist-packages/tastypie/resources.py\"
当我尝试使用 curl 发布原始数据时,我也会收到相同的消息,我“相信”这与 ifbyphone 的 POST 方法使用的基本过程相同:
curl -X POST --data 'callerid=1&someid=2&number=3&duration=4&phoneid=5' http://myapp.com/api/
所以,假设我的问题实际上是错误消息中指定的,并且没有反序列化方法,我将如何编写一个?
#### 更新 ######
在此提交的一些帮助下(https://github.com/toastdriven/django-tastypie/commit/7c5ea699ff6a5e8ba0788f23446fa3ac31f1b8bf)我一直在尝试编写自己的序列化程序,从文档中复制基本框架(https://django -tastypie.readthedocs.org/en/latest/serialization.html#implementing-your-own-serializer)
import urlparse
from tastypie.serializers import Serializer
class urlencodeSerializer(Serializer):
formats = ['json', 'jsonp', 'xml', 'yaml', 'html', 'plist', 'urlencode']
content_types = {
'json': 'application/json',
'jsonp': 'text/javascript',
'xml': 'application/xml',
'yaml': 'text/yaml',
'html': 'text/html',
'plist': 'application/x-plist',
'urlencode': 'application/x-www-form-urlencoded',
}
def from_urlencode(self, data,options=None):
""" handles basic formencoded url posts """
qs = dict((k, v if len(v)>1 else v[0] )
for k, v in urlparse.parse_qs(data).iteritems())
return qs
def to_urlencode(self,content):
pass