Задать вопрос
  • Почему двухфакторная аутентификация не ухудшает безопасность?

    @AstraVlad
    Финансист, консультант, программист-любитель
    Вообще-то номер телефона как правило "восстановить" или изменить без личного визита в банк (или куда ещё) нельзя. Пароль, имея телефон, сбросить обычно можно, но разработчики исходят из того, что у нормального человека телефон защищен как минимум пин-кодом, а как максимум биометрией и даже, украв физически аппарат, злоумышленник не получит доступа к данным.

    Да, можно, дать на лапу манагеру в салоне и втихую перевыпустить симку, но тут уже проблема в человеческом факторе, а не в уязвимости системы защиты.
    Ответ написан
  • Каким образом реализовать иерархию пользователей?

    @AstraVlad
    Финансист, консультант, программист-любитель
    Я бы танцевал от того, в какой момент меняется показатель, к которому привязан статус. Скажем, если это просмотры объявления, то в какой момент фиксируется +1 просмотр. В этом куске кода подняли просмотры на один, дернули из базы юзера-владельца и вызвали у него соответствующий метод, скажем check_and_update_status(), передав ссылку на объявление. И уже в этом методе отрабатываем проверку на повышение статуса.

    Или для гибкости сделать функцию-диспетчер, подписать ее на кастомный сигнал view_count_increased, после увеличения числа просмотров посылать этот сигнал, а уже в диспетчере обращаться к юзеру. Это будет менее наглядно (и в документации так не советуют делать), зато более гибко, можно будет в любой момент отключить или изменить эту часть логики.

    Это только то, что сходу пришло в голову, наверняка более опытные коллеги смогут подсказать лучше.
    Ответ написан
  • Возможно ли сократить данный JS код?

    @AstraVlad
    Финансист, консультант, программист-любитель
    Делаем массив строк поиска, из него через map() делаем массив inp, из него опять через map() массив filter. Потом запускаем for... of по массиву строк поиска, одновременно наращивая переменную-счетчик и меняем значения value соответствующих элементов на значения из массива filter.
    Ответ написан
    Комментировать
  • Свой вебинтерфейс: как сделать последовательную цепочку экранов редактирования?

    @AstraVlad
    Финансист, консультант, программист-любитель
    Интересная задачка. А нельзя просто провалить валидацию формы и вернуть юзера обратно?

    Если нет, то самый тупой вариант это засунуть данные прямо в параметры URL при редиректе. А вот самый хитровыпуклый и универсальный что я могу придумать это держать что-то вроде Redis в качестве кэша, кидать туда данные и передавать в URL id записи. Оба способа будут работать при любой архитектуре системы и не зависят ни от языка, ни от фреймворка.

    А так, Django поддерживает сессии и вообще очень удобен.
    Ответ написан
    3 комментария
  • Как ускорить работу с массивами?

    @AstraVlad
    Финансист, консультант, программист-любитель
    Может быть вообще можно заранее подготовить данные или хотя бы их часть? Особенно если разные люди работают с одними и теми же данными, то неплохо держать где-нибудь кэш и грузить данные из него в фоне пока юзер смотрит на график крупного масштаба, отрисованный, скажем, по сотне точек и думает где ему нужно увеличить.

    В общем, если уточнить задачу, могут найтись разные решения.
    Ответ написан
    Комментировать
  • Почему не умножается массив чисел в JS?

    @AstraVlad
    Финансист, консультант, программист-любитель
    И вместо цикла можно еще взять reduce для полного счастья:
    let toq = [1, 3, 5, 7, 9];
    const start = 1;
    const res = toq .reduce((acc, curr) => acc * curr, start);
    Ответ написан
    Комментировать
  • Дан следующий блок кода. Прокомментировать его выполнение. Как переписать данный код с использованием функционального подхода?

    @AstraVlad
    Финансист, консультант, программист-любитель
    Рекурсию запилить, например.
    Ответ написан
    Комментировать
  • Какая разница между методами get_object и get в классе APIView?

    @AstraVlad
    Финансист, консультант, программист-любитель
    Как бы то, что get отрабатывает GET запрос, а get_object получает нужный объект из БД.

    Это пока примеры из туториала все кажется просто и непонятно зачем их разделять. А когда работаешь с нормальной (сложной) базой, внезапно оказывается, что отделять логику обработки HTTP-запросов от бизнес-логики это очень, очень хорошая идея.
    Ответ написан
    Комментировать
  • Выбор БД для записи на прием к врачу?

    @AstraVlad
    Финансист, консультант, программист-любитель
    Ту, которую есть кому администрировать.
    Ответ написан
    Комментировать
  • Какие аналоги electron есть для python?

    @AstraVlad
    Финансист, консультант, программист-любитель
    Что значит "со стороны бэка как с сайтом"? Если нужна встроенная веб-админка, то Django, если просто нужно поднять сайт, то тоже Django или Flask (проще, легче, но больше нужно делать руками).
    Ответ написан
    Комментировать
  • Зачем нужны сеттеры в Python?

    @AstraVlad
    Финансист, консультант, программист-любитель
    Смысл не в том, чтобы прогер не мог выстрелить себе в ногу -- если захочет, то выстрелит, а в том, чтобы в нормальных условиях можно было проверить в ту ли ногу он стреляет, заменить при необходимости картечь на пулю на лету или вообще тихо аннулировать выстрел. А это бывает нужно, особенно если учесть, что поля объекта совсем не обязаны быть переменными-примитивами, спокойно лежащими в куче. Или могут ВНЕЗАПНО перестать ими быть по мере развития продукта.

    У меня иногда тоже бывает что когда пишу "правильно", разделяя уровни абстракции и всячески инкапсулируя, приходит в голову мысль: "А нафига? Можно же сделать проще." А потом через неделю-месяц-год приходится что-то переделывать и выясняется, что благодаря тому, что все сделано "по науке", можно поменять источник данных, скажем, с таблицы Эксель на локальном диске на Мускул, хостящийся за пол-мира от меня, за полчаса без малейшего напряга и изменения логики остальной части программы. И понимаешь, что ты, оказывается, не полный идиот :).
    Ответ написан
    Комментировать
  • Почему не приходит ответ json от сервера через функцию fetch?

    @AstraVlad
    Финансист, консультант, программист-любитель
    Очень странно. Если не указывать init, то все работает:
    5f95e30fecea7375678603.png

    Если указывать, выдает Response failed, что, наверное, логично ибо POST вместо GET. Но вот промиса добиться не удалось.
    Ответ написан
  • Правильное отображение нескольких моделей на странице в Джанго?

    @AstraVlad
    Финансист, консультант, программист-любитель
    Я правильно понял, что это все -- записи блога? Тогда зачем для записей разных тематик делать разные модели? Делаем одну единственную модель и в ней проставляем поле "Тема" (прически, ногти и т.д.). Перед выводом сортируем по тематике и выводим в одном цикле.
    Ответ написан
  • SQL. Как переформировать строки в столбцы?

    @AstraVlad
    Финансист, консультант, программист-любитель
    Вот здесь описано как это можно сделать, начиная со слов: "But what happens if you don’t know the dates ahead of time...".
    Ответ написан
    Комментировать
  • Обойти ограничение на количество символов в форме?

    @AstraVlad
    Финансист, консультант, программист-любитель
    Я пока вижу два варианта:
    1. Использовать формсет и вводить сразу несколько записей (но не через запятую).
    2. Написать форму самому и уже во вьюшке разбирать введенные данные.

    Вводить в поле ModelForm больше символов, чем требует Model это все-равно что пытаться налить два литра пива в литровую банку. Не войдет.
    Ответ написан
    2 комментария
  • Как можно реализовать доступ к хранилищу фотографии?

    @AstraVlad
    Финансист, консультант, программист-любитель
    Если речь идет о nodejs, значит есть какой-то хостинг, почему бы не залить фотографии туда и не сделать форму поиска с последующим редиректом на собственно картинку? А уж как организовать поиск это дело хозяйское, если, скажем, по наименованию файла, то скриптом загрузить данные в любую БД в структуре {имя: путь} и дальше уже искать введенную подстроку средствами самой БД и брать соответствующий путь если нашли. Тут работы на полчаса.
    Ответ написан
    2 комментария
  • 1)Почему отличаются графики? 2)Есть ли функция для записи элемента в массив в цикле?

    @AstraVlad
    Финансист, консультант, программист-любитель
    1. Небольшие отличия в значениях могут быть из-за float, в финансовой аналитике, например, я вообще стараюсь его не использовать, потому что даже при операциях с небольшими числами могут вылезать какие-нибудь хвосты из стотысячных, причем совершенно внезапно.
    Вот пример и объяснение таких проблем
    Но может быть и не в этом дело, конечно, в данном случае.

    2. Имеется в виду list.append()? У вас тут не массивы, а списки. Я правильно понял, что нужно сохранять в списке значения, которые получаются в цикле "while i < N:"?
    Ответ написан
    3 комментария
  • Можно ли упростить код?

    @AstraVlad
    Финансист, консультант, программист-любитель
    Например положить команды и вызываемые ими смайлики с словарь вроде smileys = {text: smile_list} и сделать цикл:
    for text, smile_list in smileys:
        if text in message.text:
            msg = message.text
            for i in range(0, len(smile_list)):
                wtf = (text+"{0}]").format(i)
                if wtf in msg:
                      bot.send_message(message.chat.id,msg.replace(wtf,smile_list[i]))


    Список смайлов генерируется аналогично. Вообще, если мы видим, что у нас дважды встречается один и тот же (по структуре) фрагмент кода, значит мы что-то уже сделали не так и тут или нужен цикл или надо выделить его в отдельную функцию.
    Ответ написан
    1 комментарий
  • Websocket(redis) не хотят работать connectionRefusedError: [Errno 111] onnect call failed ('134.0.113.144', 6379)?

    @AstraVlad
    Финансист, консультант, программист-любитель
    По "бонусному", у меня все работает только если в дебаге ставлю

    STATIC_ROOT = ''
    STATICFILES_DIRS = (
            os.path.join(BASE_DIR, 'static'),
    )


    а в продакшне:
    STATIC_ROOT = 'static/'
    И больше ничего.

    В обоих случаях:
    STATIC_URL = '/static/'
    STATIC_BASE = os.path.join(BASE_DIR, 'static/')


    Но у меня разработка на Win идет. Сам в этой магии пока не разобрался :).
    Ответ написан
  • Ошибка соединения с mysql?

    @AstraVlad
    Финансист, консультант, программист-любитель
    А зачем нужны и mysqlclient и PyMySQL одновременно? Достаточно же одного mysqlclient.
    Ответ написан
    Комментировать