Запрос на передачу в классы, унаследованные от 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
. Это могло быть проблемой.