0

DjangoとTastyPieを使用してAPIを作成しています。リソースを介してユーザーを登録しようとしています。私は、同様の目標を持つこの質問からコードのほとんどを取り出しました。

プログラムでdjango-tastypieAPIを使用してユーザーを作成または登録するにはどうすればよいですか?

私の問題は、ユーザーを登録するときに問題が発生することです。

コードは次のとおりです。

class RegisterUserResource(ModelResource):
    class Meta:
        allowed_methods = ['post']
        object_class = VouchersUser

        authentication = Authentication()
        authorization = Authorization()

        include_resource_uri = False
        fields = ['username']

        resource_name = 'register'

    def obj_create(self, bundle, request=None, **kwargs):
        try:
            bundle = super(RegisterUserResource).obj_create(bundle, request, **kwargs)
            bundle.obj.set_password(bundle.data.get('password'))
            bundle.obj.save()
        except IntegrityError:
            raise BadRequest('User with this username already exists')
        return bundle

ただし、ユーザー名とパスワードの両方のパラメーターを使用してPOSTを送信すると(プログラムで実行します)、次のエラーが返されます。

{"error_message": "The format indicated 'multipart/form-data' had no available deserialization method. Please check your formats and content_types on your Serializer.", "traceback": "Traceback (most recent call last):

 File "/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py", line 195, in wrapper
 response = callback(request, *args, **kwargs)

 File "/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py", line 402, in dispatch_list
 return self.dispatch('list', request, **kwargs)

 File "/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py", line 431, in dispatch
 response = method(request, **kwargs)

 File "/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py", line 1176, in post_list
 deserialized = self.deserialize(request, request.raw_post_data, format=request.META.get('CONTENT_TYPE', 'application/json'))

 File "/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py", line 351, in deserialize
 deserialized = self._meta.serializer.deserialize(data, format=request.META.get('CONTENT_TYPE', 'application/json'))

 File "/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/serializers.py", line 192, in deserialize
 raise UnsupportedFormat("The format indicated '%s' had no available deserialization method. Please check your formats and content_types on your Serializer." % format)

UnsupportedFormat: The format indicated 'multipart/form-data' had no available deserialization method. Please check your formats and content_types on your Serializer.
"}

シリアライザーに問題があると推測できますが、どのように解決できますか?

ありがとうございました

4

2 に答える 2

2

django.test.client.postTastypieで使用しようとしていると思います。その場合は、追加のパラメーター (content_type) を渡す必要があります。通話は次のようになります。

client.post('/resource/to/create/', 'json_string_here', content_type='application/json')
于 2012-05-24T15:32:59.067 に答える
1

同じ問題がありました。ヘッダーに「Content-Type: application/json」を渡すことで解決しました。

于 2014-06-25T19:14:35.140 に答える