Задать вопрос
  • В каких программах пишут сайты профессионалы?

    zooks: Ну для освоения на начальном уровне и в блокноте можно. Там больших файлов не потребуется. Но лучше канечно с подсветкой кода. Тем более что сейчас выбор большой имеется. Я лично с обычного блокнота и начинал. Давно это было. Дримвивер может и изменился. Возможно даже перерос в какои-то полноценный IDE я не вкурсе, не пользуюсь. Это дело вкуса каким редактором пользоваться. Но не кнопочки мышкой перетаскивать это точно. =)
  • Как вызвать функцию Python/Django как "триггер"?

    @bromzh: Скорее это оператор реализованный на С проходящий через функцию __add__ чтобы иметь возможность переопределить, + не на python реализован и быстр. Операторы питона впринципе быстрее работают нежели пользовательские определения. Оператор . - поиска тоже чуть чуть замедляет. Но это всё незначительно, наносекунды. И лучше использовать то что компактней и понятней для пользователя.
  • Что лучше почитать по тестам в django?

    Очень хорошая книга, которая именно обучает.
  • Как реализовать декоратор класса в python?

    @vvpoloskin Непонимаю зачем вы показали размер создаваемого обьекта в памяти? Это не на что не будет влиять темболее на быстроту. Сейчас на машинах гигабайты памяти. А вот ненужный вызов функции по сравнению с размерностью замедлит ровно в *n раз.

    Какое выбрашенное исключение? Там не должно быть никаких исключений это обычное наследование с перезаписью метода базового класса только выполненное через декоратор. Кстати программисты постоянно видят исключения т.к. ничего не должно замалчиваться и это нормально.

    Зачем вам копировать bases? Какая в этом потребность? У вас простое наследование. Все базовые классы и так создались в нужном порядке. В итоге к классу вьюхе просто добавится в начало определения базовых классов ещё один базовый класс OverrideClass а mro это просто функция которая отображает базовые классы.
  • Как реализовать декоратор класса в python?

    @vvpoloskin Ну этот вариант покрайне мере создает обьект класса 1 раз для вюхи. В вашем же случае функция newgetattr выполнялись чуть ли не 3 раза т.к. от джанги шло обращение к разным методам через getattribute же до того как вызвался dispatch.

    Скопировать метоинформацию в классе достаточно просто. Но тут как раз тот случай когда гибкость перекрываестся красотой и приходится выбирать либо гибкость либо красота. Я бы выбрал второе. =)

    class OverrideClass(cls):
        __doc__ = cls.__doc__
        __name__ = cls.__name__
    
        @method_decorator(decorator)
        ...


    Лучше декорировать тот метод который принято декорировать в Python (Django) в опрееленных случаях. Метод dispatch специально существует для таких случаев чтобы предупредить или сделать чтолибо до выполнения остальной части вьюхи. Другим ведь программистам ваш код читать придется когда то. Ещё проще и понятнее обернуть в функцию вьюху непосредственно в urls.py без лишних телодвижений.
  • Как реализовать декоратор класса в python?

    Ну не могу я не предложить свой вариант реализации =)

    def apply_decorator(decorator):
    
        def wrap(cls):
    
            class OverrideClass(cls):
    
                @method_decorator(decorator)
                def dispatch(self, *args, **kwargs):
                    return super(OverrideClass, self).dispatch(*args, **kwargs)
    
            return OverrideClass
    
        return wrap
    
    
    @apply_decorator(login_required)
    class ProfileUpdateView(UpdateView):
  • Как реализовать декоратор класса в python?

    Частные случаи можно и в потомках тем же декоратором реализовать. А вообще да если нужна гибкость и проект из кучи разных вьюх где идет переключение функционала. Не вижу никакой проблемы написать 3 разных миксина и по своей нужде их наследовать можно даже в отдельном приложении. Это не простыня а явное обозначение желаемого в действительное. Ибо "Явное лучше, чем неявное. Простое лучше, чем сложное."

    И вообще если у вас может быть не django какой там может быть dispatch? Это всеголиш метод класса Generic Base View джанговский.
  • Как вызвать функцию Python/Django как "триггер"?

    Все правильно сказал. Только я бы не согласился с утверждением что для простой склейки строк нужно использовать join's. Join очень медленный. Тесты показывают что + для простой конкатенации строк работает в разы быстрее чем join. Во первых создается меньше обьектов python во вторых не вызывается функция.