Django Tastypie Регистрация пользователя

Я создаю API, используя Django и TastyPie. Я пытаюсь зарегистрировать пользователя через ресурс. Я взял большую часть своего кода из этого вопроса, который имеет аналогичную цель:

Как создать или зарегистрировать пользователя с помощью django-tastypie API программно?

Моя проблема в том, что у меня возникает проблема при регистрации пользователя.

Код:

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.
"}

Я могу сделать вывод, что есть проблема с сериализатором, но что и как я могу решить?

Спасибо


person Community    schedule 21.05.2012    source источник
comment
Я попробовал это, и он не терпит неудачу при повторной отправке того же имени пользователя. На самом деле он снова создает пользователя с тем же именем пользователя. Интересно, почему..   -  person endre    schedule 01.06.2012
comment
Понимаю. Можете ли вы сказать мне, как вы выполнили запрос POST?   -  person    schedule 01.06.2012
comment
Опубликовал json с именем пользователя и паролем на основе django-tastypie.readthedocs.org/en/latest/. ТАКЖЕ я использую django-nonrel с appengine, так что это тоже может быть проблемой. Буду исследовать на следующей неделе..   -  person endre    schedule 03.06.2012
comment
Этот код не работает для меня, если я не изменю его с super(RegisterUserResource) на super(RegisterUserResource, self). к вашему сведению.   -  person Kenny Winker    schedule 14.11.2012


Ответы (2)


Я предполагаю, что вы пытаетесь использовать django.test.client.post с Tastypie. Если это так, вам нужно передать дополнительный параметр — content_type. Вот как должен выглядеть ваш звонок:

client.post('/resource/to/create/', 'json_string_here', content_type='application/json')
person buzypi    schedule 24.05.2012
comment
Спасибо за ответ. Я попробую это как можно скорее и отвечу. - person ; 31.05.2012

была такая же проблема. передача «Content-Type: application/json» в заголовке решила это для меня.

person IJR    schedule 25.06.2014