Запрос на передачу в классы, унаследованные от django

Я переопределяю некоторые методы популярного пакета, django-activity-stream (Я думаю, что посылка в основном не имеет отношения к этому вопросу).

от app/urls.py Я звоню TeamJSONActivityFeed

urlpatterns = [
    ...
    url(_(r'^feeds/organization/(?P<organization_id>.+)$'), TeamJSONActivityFeed.as_view(name='organization_stream')),
    ...
]

Затем TeamJSONactivityFeed вызывает 'pass', с которым я не слишком хорошо знаком, и наследуется от двух других классов, OrganizationStreamMixin а также JSONActivityFeed.

from rest_framework.authentication import TokenAuthentication

class TeamJSONActivityFeed(OrganizationStreamMixin, JSONActivityFeed):
    """
    JSON feed of Activity for a custom stream. self.name should be the name of the custom stream as defined in the Manager
    and arguments may be passed either in the url or when calling as_view(...)
    """
    authentication_classes = (TokenAuthentication,)
    pass

Моя проблема в том, что я не могу получить доступ / передать объект запроса в эти унаследованные классы. Как мне передать это? Сейчас,self.request.user а также request.user являются AnonymousUser объекты.

class OrganizationStreamMixin(object):
    name = None

    def get_object(self,request):
        # this is printing Anonymous User
        pprint(str(self.request.user))
        pprint(str(request.user))
        return

    def get_stream(self):
        return getattr(Action.objects, self.name)

    def items(self, request, *args, **kwargs):
        return self.get_stream()(*args[1:], **kwargs)


class JSONActivityFeed(AbstractActivityStream, View):
    """
    Feed that generates feeds compatible with the v1.0 JSON Activity Stream spec
    """
    def dispatch(self, request, *args, **kwargs):

        for i, v in kwargs.items():
            print ("    ", i, ": ", v)

        return HttpResponse(self.serialize(request, *args, **kwargs),
                            content_type='application/json')

    def serialize(self, request, *args, **kwargs):
        pprint(str(self.request.user))

        items = self.items(request, *args, **kwargs)
        return json.dumps({
            'totalItems': len(items),
            'items': [self.format(action) for action in items]
        })

Примечание: я немного похож на django/python noob, но уверен, что вызываю это правильно из внешнего интерфейса. Подобные запросы имеют доступ к запросу пользователя.

1 ответ

Думаю, есть небольшая путаница. У вас есть доступ к объекту запроса, иначе это вызовет ошибку при попытке доступа.user на None. Если вас беспокоит, что это экземпляр AnonymousUser, выполните аутентификацию перед доступом к этому представлению. Если вам нужно предотвратить доступ экземпляров AnonymousUser к этому представлению, оберните представлениеlogin_required декоратор.

редактировать

Вы отменяете dispatch метод без вызова super. Это могло быть проблемой.

Другие вопросы по тегам