Получить аутентифицированного пользователя в django-tastypie

Я только начинаю с Python и Django и использую deliciouspie для создания RESTful API.

Мне нужно вычислить поле ресурса на основе аутентифицированного пользователя, я планирую переопределить метод dehydr_field в своем ресурсе, но я не знаю, как получить аутентифицированного пользователя в методе dehydr_field.

Я использую ApiKeyAuthentication от deliciouspie, и в настоящее время я передаю параметры аутентификации в строке запроса URL-адреса, но я также хотел бы иметь возможность передавать параметры аутентификации и в заголовке Authentication.

Я думаю, что у меня должна быть возможность получить имя пользователя из строки запроса или заголовка авторизации самостоятельно и найти пользователя с этим, но у меня такое ощущение, что это уже где-то должно быть реализовано во вкусном пироге, но я не мог найти его в документы.

Вот пример кода:

class MyModelResource(ModelResource):

    calculated_field = fields.BooleanField(readonly=True)

    class Meta:
        queryset = MyModel.objects.all()
        resource_name = 'mymodel'
        authentication = ApiKeyAuthentication()     

    def dehydrate_calculated_field(self, bundle):
        user = <get authenticated user somehow>
        return <some boolean that's calculated depending on authenticated user>

Я хотел бы знать, есть ли у deliciouspie какая-то встроенная функциональность для получения аутентифицированного пользователя или правильный способ свернуть мой собственный, основанный на параметрах строки запроса или полях заголовка.


person irodrigo17    schedule 20.01.2013    source источник


Ответы (3)


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

user = bundle.request.user

Спасибо Эйдану Юэну за то, что указал мне правильное направление.

person irodrigo17    schedule 20.01.2013

Я не совсем знаком с Tastypie, но думаю, что ресурс Tastypie — это представление на основе класса django. В этом случае вы сможете получить пользователя с помощью

user = self.request.user

person Aidan Ewen    schedule 20.01.2013
comment
Привет, спасибо за ваш ответ, на самом деле это не сработало, но это помогло мне узнать, что я могу получить пользователя из запроса, потому что bundle имеет ссылку на запрос ( не себя). Подробности смотрите в моем ответе. - person irodrigo17; 20.01.2013
comment
Да, кстати, я не уверен, что ресурс deliciouspie представляет собой представление на основе класса django, не могу найти его в документации по deliciouspie и проверив код здесь я думаю, что это не по строке 65 class Resource(object): - person irodrigo17; 20.01.2013
comment
Ресурс Tastypie не является представлением на основе классов, или, по крайней мере, пока. Tastypie был выпущен до того, как были введены представления на основе классов. Кроме того, ресурс на самом деле не является представлением по своей сути, поскольку он обрабатывает urlconfig, а также связанные с ним представления, следовательно, по определению это не совсем представление. - person miki725; 20.01.2013
comment
+1 за подробное объяснение miki725 - person irodrigo17; 21.01.2013

Я использую Изменения для каждого запроса Набор запросов

class CurrentUserResource(ModelResource):
    class Meta:
        queryset = User.objects.all()
        resource_name = 'current-user'

    def get_object_list(self, request):
        users = super(CurrentUserResource, self).get_object_list(request)
        return users.filter(id=request.user.id)
person alexei rysev    schedule 07.03.2016