Передать запрос к django унаследованным классам - PullRequest
0 голосов
/ 08 января 2020

Я переопределяю некоторые методы популярного пакета, 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

Моя проблема в том, что я не могу получить доступ / передать объект запроса в / к этим унаследованным классам. Как я мог бы go передать это? Прямо сейчас, 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]
        })

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

1 Ответ

1 голос
/ 08 января 2020

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

Правка

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...