Я пытаюсь проверить, является ли 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
).