次のステップがどうあるべきかを理解するのに少し苦労しています。私は Tastypie を使用して Web アプリケーションの API を作成しています。
別のアプリケーション、具体的には ifbyphone.com から、次のようなヘッダーのない POST を受信しています。
post data:http://myapp.com/api/
callerid=1&someid=2&number=3&result=Answered&phoneid=4
今、サーバー ログで、これがサーバーにヒットしていることがわかります。しかし、tastypie は POST の形式について不平を言っています。
{"error_message": "'application/x-www-form-urlencoded' で示されている形式には、利用可能なデシリアライズ方法がありませんでした。お使いのシリアライザーを確認
formats
しcontent_types
てください。", "traceback": "Traceback (最新の最後の呼び出し):\ n\n ファイル \"/usr/local/lib/python2.7/dist-packages/tastypie/resources.py\"
curl を使用して生データを POST しようとすると、同じメッセージが表示されます。これは、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