Разбирался с примером на effectivedjango.com, с авторизацией пользователей и вывода информации принадлежащей конкретному пользователю. link
пример кода, который заставил долго думать:
from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator class LoggedInMixin(object): @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(LoggedInMixin, self).dispatch(*args, **kwargs)
Собственно пытаясь понять происходящее я пришёл к таким выводам: method_decorator - декоратор, который конвертирует декоратор функций в декоратор методов класса. Ему для конвертации был передан декоратор login_requred, который предназначен для вьюх, и проверяет пользователя на то залогинен он или нет, и если нужно делает redirect на страницу логина. Собственно это строчка @method_decorator(login_required) возвращает декоратор метода класса, в него мы оборачиваем ф-ю dispatch(self, *args, **kwargs), которая теперь умеет проверять наличие логина у пользователя, а так же возвращает/перекрывает метод dispatch(self, request, *args, **kwargs) у насоедованных от generic классов, тем самым защищает от любого request'а нашу class-based view, пока не будет проверен залогинен ли пользователь.
Данный примесный класс применяется следующим образом:
class ListContactView(LoggedInMixin, ListView): model = Contact template_name = 'contact_list.html' def get_queryset(self): return Contact.objects.filter(owner=self.request.user)
В итоге мы получаем список контактов, которые создал конкретный пользователь.
Прошу, вас, исправить меня, если я допустил ошибки в размышлениях. А также прошу подсказать, где можно почитать про примесные классы, т.к. по этой теме я нашел лишь в книге Лутца небольшой параграф, и примеры в параграфе строятся на основе предыдущих нескольких параграфов.