Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » Проверьте, пожалуйста, правильно ли прочитал код с effectivedjango [RSS Feed]

#1 Авг. 19, 2015 10:56:39

Astronaut
От: Earth
Зарегистрирован: 2014-12-06
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверьте, пожалуйста, правильно ли прочитал код с effectivedjango

Доброго времени суток.
Разбирался с примером на 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)

В итоге мы получаем список контактов, которые создал конкретный пользователь.

Прошу, вас, исправить меня, если я допустил ошибки в размышлениях. А также прошу подсказать, где можно почитать про примесные классы, т.к. по этой теме я нашел лишь в книге Лутца небольшой параграф, и примеры в параграфе строятся на основе предыдущих нескольких параграфов.

Офлайн

  • Начало
  • » Web
  • » Проверьте, пожалуйста, правильно ли прочитал код с effectivedjango[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version