Pull to refresh
47
0
Александр @bekbulatov

User

Send message
Перечисление юзерагентов, кому нужно показывать серверную версию, выглядит очень костыльно. Насколько полный этот список? Как тестировать эту версию, чтобы убедится, что prerender все делает правильно?
В рамках одного проекта у нас зоопарка нет. Мы используем классический стек технологий, из необычного только V8, но на это есть свои причины, описанные в этой статье. В отделе три языка для бэкенда по историческим причинам: некоторые проекты переписали с perl на python, потому что перловиков труднее найти, другие проекты влились к нам из других отделов компании.
Вообще в компании много проектов и много команд, которые ими занимаются. Каждая команда выбирает те технологии, которые им больше подходят.
CBV вовсю используются на проекте, в тексте есть примеры роутов с ними.
Что касается контроллера с декоратором, согласен, можно было реализовать с классовой вьюхой на основе RedirectView.
Определение типа устройства — лишь малая часть функционала этого модуля, а сам модуль сильно заточен под наши проекты.
для того, чтобы промотать наверх вывод какого-нить длинного SELECT-а, придется нажать Сtrl+A и затем ESC, после чего можно курсором и PgUp, PgDown ходить по буферу screen-a вверх и вниз

Удобно настроить pager в ~/.my.cnf

[mysql]
pager = less -FSinXR

А можно еще и вывод раскрасить с grcat
В PrivatePostList не нужно передавать model и определять queryset одновременно. В данном случае достаточно было бы
class PrivatePostList(DetailView):
    queryset =  Post.objects.filter(is_private=True, is_deleted=False)

Лучшим примером использования get_queryset был бы вывод постов текущего пользователя:
def get_queryset(self):
        return Post.objects.filter(author=self.request.user)

Еще не очень хорошая идея определять авторизованность пользователя в get_object. Для этого все-таки есть dispatch.
1. Как в примере выше, написать Pipeline, который будет писать в 2 csv-файла: по ссылкам с лекциями и по ссылкам с вводными. Вместо csv можно использовать любое хранилище, сводить данные там же или отдельно.
2. Передавать собранные данные на странице с лекциями в request на страницу с вводными.
>>> dict(enumerate('abc'))
{0: 'a', 1: 'b', 2: 'c'}

Можно и без промежуточного списка
Еще не сказано, существенен ли порядок элементов в результирующем списке?
Если нет, то еще один быстрый способ
{}.fromkeys(iterable).keys()

Спасибо за перевод.

Только «опережающая и ретроспективная позиционная проверка», знакомая по книге Фридла, мне кажется, звучит лучше, чем «положительное и отрицательное утверждение предпросмотра»
По мне, лучше использовать CrawlSpider, когда это возможно. Если сайт сделан нормально, не вижу смысла не доверять. А про BaseSpider думаю написать отдельную статью.

О XPathItemLoader написано еще в 0.7 версии. Я решил показать, что они есть. Хоть они иногда ограничивают возможности, мне нравятся тем что они отделяют парсинг и валидацию. Еще extract() возвращает список, в котором обычно нужен только первый элемент. Это удобно сделать с помощью TakeFirst, прописав как дефолтный процессор.
Да, все это можно. Делается так:
FormRequest.from_response(response,
                    formdata={'username': 'john', 'password': 'secret'},
                    callback=self.after_login)


Scrapy также следует редиректам, хранит куки, устанавливаемые с сервера (иногда нужно отключать).
JavaScript код не выполняет, поэтому если сайт на Ajax, запросы необходимо прописывать вручную.
И все это из коробки.
Наследуете паука от BaseSpider и пишете реквесты вручную
yield Request(url, callback=self.parse_page)
Почему схема БД не позволяла использовать select_related? Просто модели были не связаны или что?

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Works in
Registered
Activity