Я пытаюсь проверить, если user.is_authenticated()
или user.has_perm()
, но кажется невозможным расширить основанные на классах представления django. Единственный метод, который я нашел, когда появляется request
, это get()
.
class MyDetailView(DetailView):
def get(self, request, **kwargs):
import pdb
pdb.set_trace()
self.object = self.get_object()
context = self.get_context_data(object=self.object)
return self.render_to_response(context)
там я обнаружил, что request.user
является экземпляром AnonymusClass
независимо от того, вошел я в систему или нет.
(Pdb) request.user.__class__
<class 'django.contrib.auth.models.AnonymousUser'>
, поэтому проверка подлинности или разрешений всегда будет неудачной:
(Pdb) self.request.user.is_authenticated()
False
Я пытался переопределить другие методы, такие как get_object()
, get_context_data()
и другие. У каждого из них есть атрибут self.request
, но user
по-прежнему Anonymus
.
Итак, мой вопрос: Как же я должен проверять, вошел ли пользователь, используя представления на основе классов!?
Означает ли это, что я должен (вернуться и) использовать функциональные представления?
Я использую Python 2.7.1+
и Django version 1.4 pre-alpha SVN-16627
В ответ на сообщение EVIAAC:
Использование login_required
или permissions_required
декораторов не вариант. Мне нужно проверить разрешения / вход в систему после получения объекта: если объект имеет логическое поле registration_required
, установленное на True
, только зарегистрированные пользователи смогут видеть страницу, другие будут перенаправлены на страницу входа (пример поведения заимствован у django.contrib.flatpages
).