• Какие вопросы спрашивают на собеседовании Django разработчика?

    xSkyFoXx
    @xSkyFoXx
    • Самый главный навык, которым вы должны обладать - это python. Вы должны знать базовые конструкции языка, уметь пользоваться генераторами списков, отличать экземпляры от классов и т.п.
    • Django повсеместно использует классы и наследование. Вы должны уметь отвечать на базовые вопросы по ООП, его реализацию в Python. Понимать, как работает наследование, как сделать перегрузку базового класса и вызвать конструктор родителя.
    • Так как Django - это мощный ORM, вы должны понимать, как делать простые SQL запросы, как проверить миграцию, какая разница между пустым значением и значением, заполненным пустотой. Так же отличать JOIN'ы и уметь их применять в правильном контексте.
    • Обладать базовым пониманием HTML и CSS, в идеале - умением что-то подхачить на JS.
    Ответ написан
    5 комментариев
  • Видео разработки проекта на django?

    @kgbplus
    Ответ написан
    Комментировать
  • Django. Как защитить форму от множественной отправки?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    class FloodSafeMixin(object):
        def __init__(self, *args, **kwargs):
            request = kwargs.pop('request', None)
            if request:
                self._user = request.user.username if request.user.is_authenticated() else None
                self._ip = get_ip(request)
                self._period = OrderedDict()
                self._period['days'] = kwargs.pop('days', None)
                self._period['hours'] = kwargs.pop('hours', None)
                self._period['minutes'] = kwargs.pop('minutes', None)
                self._period['seconds'] = kwargs.pop('seconds', None)
                self._period['milliseconds'] = kwargs.pop('milliseconds', None)
                if not any(self._period.values()):
                    self._period = {'minutes': 1}
                else:
                    self._period = OrderedDict([(k, v) for k, v in self._period.items() if v])
            else:
                self._ip = None
            super(FloodSafeMixin, self).__init__(*args, **kwargs)
    
    
        def clean(self):
            cleaned_data = super(FloodSafeMixin, self).clean()
            sender_id = hashlib.md5((self._user if self._user else self._ip).encode('utf-8')).hexdigest()
            if sender_id:
                class_name = self.__class__.__name__
                cache_name = 'last-submit.{0}.{1}'.format(class_name, sender_id)
    
                now = datetime.now()
                last_submit = cache.get(cache_name, now - timedelta(days=1))
                if (now - last_submit) < timedelta(**self._period):
                    cache.set(cache_name, now)
                    period = ' '.join([u'{0} {1}'.format(v, _p('genitive', k)) for k, v in self._period.items()])
                    raise forms.ValidationError(_('Form submitted less than %(period)s ago'), code='flood',
                        params={'period': period})
                else:
                    if not self.errors:
                        cache.set(cache_name, now)
            return cleaned_data
    
    
    class FeedbackForm(FloodSafeMixin, forms.Form):
        ...
    
    
    class SomeFormHandlerView(FormView):
        def get_form_kwargs(self):
            kwargs = super(GenericFormHandlerView, self).get_form_kwargs()
            kwargs['request'] = self.request
            kwargs['minutes'] = 2
            return kwargs
        ...
    Ответ написан
    Комментировать
  • Можно ли задавать имена переменных в шаблоне Django на кириллице?

    sim3x
    @sim3x
    Не надо делать 1с на моей джанго
    Ответ написан
    Комментировать
  • Можно ли задавать имена переменных в шаблоне Django на кириллице?

    @Animkim
    Питон вокруг меня
    Ненормально.
    Ответ написан
    Комментировать
  • Как оптимальным образом в Django проверить текст на наличие слов из базы?

    @marazmiki
    Укротитель питонов
    Если абстрагироваться от базы данных, то задача выглядит слегка проще. Считайте, что есть два множества: множество плохих слов и множество слов в тексте. Остаётся определить, пересекаются ли эти множества. Если пересекаются, то как минимум одно плохое слово есть :-)

    >>> a = { 1, 2, 3 }
    >>> b = { 2, 3, 4 }
    >>> c = { 5, 6 }
    >>>
    >>> a & b
    {2, 3}
    >>> a & c
    set()


    Теперь ближе к прикладной задаче. Поскольку множество "плохих слов" у нас хоть и хранится в БД (к слову, модели принято называть в единственном числе — BadWord — а не во множественном, как у Вас), но пока не происходят изменений, его можно считать статичным. Поэтому можно без зазрения совести брать это множество из кеша.

    # utils.py
    from django.core.cache import cache
    
    def get_bad_words():
        return cache.get('bad_words')


    и пересчитывать кеш при создании, редактировании или удалении записей из BadWords. Например, с помощью сигналов:

    # models.py
    def set_bad_words(**kwargs):
        from django.core.cache import cache
        cache.set('bad_words', {w.bword for w in BadWords.objects.all()})
    
    models.signals.post_save.connect(set_bad_words,  sender=BadWords)
    models.signals.post_delete.connect(set_bad_words, sender=BadWords)


    Теперь остаётся только преобразовать входящий текст в множество слов

    И пример использования:
    # utils.py
    
    def get_words_from_text(text_string):
        return set([w for w in text_string.lower().split()])


    и определять, есть ли плохие слова (т.е. пересекаются ли множества):

    # utils.py
    
    def has_bad_words(text_string):
        return bool(get_bad_words() & get_words_from_text(text_string))


    В общем, пространство для рефакторинга и улучшений ещё есть (неплохо бы вычистить из текста пунктуацию, стоп-слова, лишние пробелы, сигналы перенести в apps.py согласно новым правилам application loading, а то и вовсе выкинуть их), но идея, думаю, ясна.
    Ответ написан
    4 комментария
  • Сайт новостей на Django?

    alexhouse
    @alexhouse
    Full Stack Web Developer Python and Django
    Рекомендую для такого проекта выбрать Wagtail CMS. У него удобная админка для сайта новостей и документация хорошо написана.

    https://github.com/wagtail/wagtail
    docs.wagtail.io/en/v1.8
    Ответ написан
    Комментировать
  • Локальный репозиторий в сети. Как лучше?

    Ernillew
    @Ernillew
    Администрирую *nix-системы с 1997 года
    > пакетов на машины, которых нет в официальных репозиториях.
    > зеркалирование;

    Что зеркалировать-то будем?

    Если у вас большое количество сторонних пакетов, то собирайте их сами и поднимите свой репозиторий, reprepro вам в помощь.
    Ответ написан
    3 комментария
  • Как вывести картнку в шаблоне django?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    models.py
    class Product(models.Model):
        @property
        def random_pic(self):
            return self.images.order_by('?').first()


    template.html
    <img src="{{ product.random_pic.image.url }}">
    Ответ написан
    4 комментария
  • Что выбрать для back-end медицинского портала?

    @four4
    Я вам, конечно, отвечу то, что вы не хотите услышать и не получю зеленую галочку на ответе, но нет никакой разницы.
    То есть абсолютно.

    Какой есть (хороший, разумеется) программист под рукой, какую технологию он знает/предпочитает - на том и писать.

    Качество конечного продукта от языка программирования не зависит, а зависит от того, кто будет реализовывать, от его квалификации.

    • Устойчивость - это что еще за параметр, по крайней мере не общеупотребимый термин?
    • Читаемость кода - это вообще смешно, зависит от того кто пишет.
    • Скорость выполнения - значение этого фактора преувеличивают новички или люди, которые не являются специалистами, гораздо важнее как именно спроектировано и написано, а не от языка - можно запросто затормозить и быстрый язык и быстро работающую систему реализовать на медленном языке.


    Если вы заказчик - то не занимайтесь не свойственными вам вопросами, пусть решает исполнитель.
    Если вы исполнитель - то писать нужно на том, что лучше знаешь.
    Ответ написан
    Комментировать
  • Почему не подключается СSS к Django?

    для примера, код из settings.py, ниже на картике структура каталога и его расположение относительно корня проекта. скрипты и прочее складывайте в static_files
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'static', 'static_root')
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static', 'static_files'),
    )
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR,  'static', 'media')

    в файле urls.py в конце пропишите
    if settings.DEBUG:
        urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
        urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)


    5070d953ed1d41f69562fc8fefaa61d3.png

    в документации все это подробно описано.
    Ответ написан