Перечисление юзерагентов, кому нужно показывать серверную версию, выглядит очень костыльно. Насколько полный этот список? Как тестировать эту версию, чтобы убедится, что prerender все делает правильно?
В рамках одного проекта у нас зоопарка нет. Мы используем классический стек технологий, из необычного только V8, но на это есть свои причины, описанные в этой статье. В отделе три языка для бэкенда по историческим причинам: некоторые проекты переписали с perl на python, потому что перловиков труднее найти, другие проекты влились к нам из других отделов компании.
Вообще в компании много проектов и много команд, которые ими занимаются. Каждая команда выбирает те технологии, которые им больше подходят.
CBV вовсю используются на проекте, в тексте есть примеры роутов с ними.
Что касается контроллера с декоратором, согласен, можно было реализовать с классовой вьюхой на основе RedirectView.
для того, чтобы промотать наверх вывод какого-нить длинного SELECT-а, придется нажать Сtrl+A и затем ESC, после чего можно курсором и PgUp, PgDown ходить по буферу screen-a вверх и вниз
1. Как в примере выше, написать Pipeline, который будет писать в 2 csv-файла: по ссылкам с лекциями и по ссылкам с вводными. Вместо csv можно использовать любое хранилище, сводить данные там же или отдельно.
2. Передавать собранные данные на странице с лекциями в request на страницу с вводными.
Только «опережающая и ретроспективная позиционная проверка», знакомая по книге Фридла, мне кажется, звучит лучше, чем «положительное и отрицательное утверждение предпросмотра»
По мне, лучше использовать CrawlSpider, когда это возможно. Если сайт сделан нормально, не вижу смысла не доверять. А про BaseSpider думаю написать отдельную статью.
О XPathItemLoader написано еще в 0.7 версии. Я решил показать, что они есть. Хоть они иногда ограничивают возможности, мне нравятся тем что они отделяют парсинг и валидацию. Еще extract() возвращает список, в котором обычно нужен только первый элемент. Это удобно сделать с помощью TakeFirst, прописав как дефолтный процессор.
Scrapy также следует редиректам, хранит куки, устанавливаемые с сервера (иногда нужно отключать).
JavaScript код не выполняет, поэтому если сайт на Ajax, запросы необходимо прописывать вручную.
И все это из коробки.
Вообще в компании много проектов и много команд, которые ими занимаются. Каждая команда выбирает те технологии, которые им больше подходят.
Что касается контроллера с декоратором, согласен, можно было реализовать с классовой вьюхой на основе
RedirectView
.Удобно настроить pager в ~/.my.cnf
[mysql]
pager = less -FSinXR
А можно еще и вывод раскрасить с grcat
Лучшим примером использования get_queryset был бы вывод постов текущего пользователя:
Еще не очень хорошая идея определять авторизованность пользователя в get_object. Для этого все-таки есть dispatch.
2. Передавать собранные данные на странице с лекциями в request на страницу с вводными.
Можно и без промежуточного списка
Если нет, то еще один быстрый способ
Только «опережающая и ретроспективная позиционная проверка», знакомая по книге Фридла, мне кажется, звучит лучше, чем «положительное и отрицательное утверждение предпросмотра»
— Delicious' bookmarks
— Недобросовестные поставщики
На оф сайте: блог, рецепты, сниппеты
О XPathItemLoader написано еще в 0.7 версии. Я решил показать, что они есть. Хоть они иногда ограничивают возможности, мне нравятся тем что они отделяют парсинг и валидацию. Еще extract() возвращает список, в котором обычно нужен только первый элемент. Это удобно сделать с помощью TakeFirst, прописав как дефолтный процессор.
Scrapy также следует редиректам, хранит куки, устанавливаемые с сервера (иногда нужно отключать).
JavaScript код не выполняет, поэтому если сайт на Ajax, запросы необходимо прописывать вручную.
И все это из коробки.