• Best practies? Две независимые модели для пользователя и админа, Django 1.11.x?

    @immaculate
    Vikky Shostak это не будет нормально работать, потому что может сломаться во многих местах.
    Например, валидация пользователя может пройти в первый раз, но между сохранением в сессию, оплатой, и созданием реального пользователя, может зарегистрироваться другой пользователь с тем же именем и email. И что тут делать? Никакого разумного решения, кроме адских костылей не придумать.

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

    Я бы на первом этапе создавал пользователя в базе сразу, с флагом `is_active = False` (этот флаг - часть стандартного класса пользователя Django). Если оплата прошла успешно, то ставил бы `is_active = True`. Заодно потом и статистику легко посчитать по `is_active`.
  • Best practies? Две независимые модели для пользователя и админа, Django 1.11.x?

    @immaculate
    Вах, у вас талант находить сложные решения простых проблем или смотреть не в те места. Ссылка, которую вы прислали, это написание собственного AuthenticationBackend. То, что вам очевидно не нужно, да и вообще мало кому нужно, потому что AuthenticationBackend уже есть встроенный в Django, а также написаны сторонними авторами на все случаи жизни.

    django-allauth решает все вопросы аутентификации. Аутентификация через соц. сети - это лишь приятное дополнение, которым пользоваться не обязательно. Зато потом вы сможете добавить 2-3 строки в настройки и она у вас заработает.

    Что касается регистрации вместе с пожертвованием... Ну, просто сделать свою собственную форму регистрации, которая одновременно занимается и регистрацией пользователя и собиранием пожертвования. Первое что пришло в голову.

    Хотя ничто не мешает собирать статистику по пожертвованиям, опять же, чтобы получить статистику только по пользователям, которые сделали пожертвование, можно просто написать соответствующий запрос, и это опять же значительно проще реализовать, чем форму, которая делает два действия.

    Вы сильно тяготеете к усложнению всего. :)
  • Best practies? Две независимые модели для пользователя и админа, Django 1.11.x?

    @immaculate
    P.S. Статья-сравнение ссылку на которую вы привели - полная хрень. Явно высосано из пальца ради наполнения блога. Например, расширение профиля через OneToOneField - это костыль, существоваший на заре Django из-за ограничений ORM Django в то время. В 2016 году, когда писалась данная статья, почти никакого смысла так поступать нет. Ни в одной ситуации.

    И дальше в статье много ошибок и ложных указаний. Явно написано для привлечения рекрутеров («смотрите, я веду блог о Django, наверное меня стоит взять на работу!»)
  • Best practies? Две независимые модели для пользователя и админа, Django 1.11.x?

    @immaculate
    Vikky Shostak
    Краснеть все равно придется, это неизбежно. Даже Кнут делает ошибки. :)

    Я делаю проекты от тривиальных до очень сложных на Python/Django уже 10 лет. И вот поверьте, ни разу в моей практике мне не требовалось что-то подобное proxy. Хотя задачи порой были сложные и нетривиальные. Просто забудьте пока об этой возможности и все.

    Думаю, что это требуется прежде всего в старых legacy системах, переписываемых на Django. Когда, например, приложение должно работать с таблицей не напрямую, а через хранимую процедуру.

    Но на самом деле, забудьте. Вы занимаетесь тем, что называется overengineering. Вам (хотя бы в первом проекте) надо придерживаться принципа KISS: делайте все как можно проще используя по максимуму стандартные решения Django. Пользователи Django, группы Django, обычные таблицы, без наследования (за исключением ровно одной таблицы — AbstractUser), обычные Class Based Views из django.views.generic. Если чего-то не хватает, берите самые используемые и поддерживаемые пакеты из перечисленных на djangopackages.com. Например, вместо изобретения велосипедов с логином и регистрацией, используйте django-allauth.

    Изучайте код хороших приложений на Django. Например:

  • Best practies? Две независимые модели для пользователя и админа, Django 1.11.x?

    @immaculate
    Vikky Shostak: AbstractUser уже определяет большинство полей необходимых пользователю. Насколько я понимаю, AbstractBaseUser нужен для реализации совсем кастомного пользователя, который радикально отличается от стандартного пользователя Django.

    Про proxy вопрос не понял. Мне кажется, что в данном случае идет overengineering. Когда вы не имея опыта в разработке Django проектов пытаетесь заранее спроектировать какие-то сложные вещи, то получаются вот такие курьезы типа многоголовых пользователей.

    Есть ли серьезные причины делать разделение на две таблицы? Ну вот правда, есть? С точки зрения безопасности точно нет, так как все части приложения будут иметь доступ ко всем таблицам и в случае нарушения безопасности это никак не поможет.

    Уверен на 99% что это просто высосанное из пальца требование, не имеющее ни реальной причины, ни реальной пользы. Только усложнит разработку в несколько раз без единого реального преимущества.
  • Как написать скрипт в linux для удаления папок с переменной %date%?

    @immaculate
    Ну я только общее направление задал, куда копать... А почему у вас у всех папок одно и то же время изменения?

    Дальше уже можно писать что-то типа:
    for i in $(seq 100 -1 30); do rm -rf $(date --date "$i days ago" '+%Y%m%d'); done
  • Как написать скрипт в linux для удаления папок с переменной %date%?

    @immaculate
    Да, find -mtime работает с датой изменения папки.

    Тогда вам нужно что-то вроде:
    test -d $(date --date='30 days ago' '+%Y%m%d') && rm -rf $(date --date='30 days ago' '+%Y%m%d')
  • Разработка web-сервисов – LAMP (Python/Django) vs. MEAN (Node.js)? Или что-то другое?

    @immaculate
    AgentProvocateur для хостинга Python существует как минимум Heroku, Google App Engine, AWS Lambda.
  • Какой максимальный срок хранения денег на апворк?

    @immaculate
    Ну если надо один раз снять данную сумму, то скорее всего получится дешевле. А вообще, если учитывать разницу курсов и т.п,, то разница на 100 долларах будет в любом случае пренебрежимо мала. Только Payoneer в дальнейшем будет регулярно снимать деньги, а PayPal — нет.

    То есть, если рассматривать в контексте заданного вопроса, PayPal однозначно лучше.
  • Что делать если команда говнокодит?

    @immaculate
    Не надо гадать, но это не vk. Не уверен, что там говнокодят, хотя ни разу их код не видел. Но требования к кандидатам у них были суровые раньше.
  • Что делать если команда говнокодит?

    @immaculate
    Boris Korobkov Нет, я не хочу называть имя. Это реальная социальная сеть, довольно популярная в узких кругах, с миллионами пользователей. Это у меня и вызвало удивление, как они с таким кодом умудряются все это поддерживать. Правда функциональность сети довольно простая, но все же.

    Это было около 5-6 лет назад, они взяли меня на работу, в первый рабочий день я открыл исходники, просидел над ними до вечера, и сказал, что очень сильно прошу прощения, но с этим я работать не буду. Они предложили рефакторинг, но я все равно испугался. Может быть, это было неправильное решение, но я видел:
    1) Сотни тысяч строк говнокода, рефакторинг которых занял бы годы, и скорее всего, все заглохло бы, так как людей нанимают, чтобы исправлять ошибки и разрабатывать новые фичи, а не годами код переписывать
    2) Я новый человек, только что пришел в команду из нескольких разработчиков, которые годами писали этот говнокод. Скорее всего, они его говнокодом не считают. А вот я для них никакого авторитета не представляю. Помимо работы с говнокодом пришлось бы преодолевать сопротивление команды, зарабатывать у них авторитет.

    В тот момент я почувствовал, что это слишком сложно для меня.

    А сеть до сих пор существует.
  • Что делать если команда говнокодит?

    @immaculate
    Хорошо писать — не значит писать два года и не значит без конца шлифовать код. Хорошо писать — это значит не использовать костыли, рефакторить по ходу дела, если видишь, что что-то сделано плохо.

    Если проект пишется два года — это тоже говнокод. Потому что столкновения с реальностью такой проект не выдержит. Все эти хрустальные дворцы из два года обдумываемых паттернов и иерархия классов глубиной в 25 уровней вложенности, не выдержит, когда выяснится, что пользователям нужно что-то другое, и вся эта иерархия классов с нагромождением паттернов не решает их задачу.

    Хорошо писать код, это, например, прежде чем написать код, изучить документацию по языку и используемым фреймворкам и библиотекам, а не копи-пастить куски из документации и примеров на StackOverflow. Хорошо писать код — это читать код open source приложений (с хорошим кодом) и учиться на примерах. Хорошо писать код — это думать, когда пишешь, задумываться: что делает эта строчка, что делает этот класс, что делает этот вызов функции.
  • Что делать если команда говнокодит?

    @immaculate
    Не раз видел говнокод, который приходилось переписывать все равно. Потому что проект растет, и по производительности говнокод не устраивает, правки тоже очень тяжело делать. А рефакторингу понемногу он может не поддаваться. Говнокод - это часто такая гигантская какашка, в которой все говноклассы и говнофункции (типично, размерами в сотни и тысячи строк) очень тесно связаны. Тронешь в одном месте, отваливается кусок в другом.

    В итоге, все равно приходится переписывать, и всегда получается, что сначала написать плохо, а затем переписать хорошо, и дольше и дороже, чем сразу написать хорошо.

    Проблема в том, что не существует способа научить писать хорошо. Понимание либо есть, либо нет. Есть люди, которые годами пишут говнокод. Тыкаешь носом, показываешь десятки статей, где говорится, почему так нельзя, показываешь реальные логи из приложения, где наглядно виден эффект говнокода (ошибки или слишком долгое время выполнения). Человек кивает, уходит, и выдает снова такой же говнокод. :(

    Не раз видел, как такие люди уходят, потому что сами не могут поддерживать свой код. Приходят на одну работу, несколько месяцев пишут говнокод, его становится все тяжелее поддерживать, и они сваливают на новое место начинать сначала, а поддерживать за ними приходится другим. Так они и какают в проекты прыжками по 3-6 месяцев. Накакал в один, получил зарплату, перепрыгнул в другой. Что там дальше с ними происходит, не знаю.
  • Почему Nginx игнорирует правило редиректа в rewrite?

    @immaculate
    Простите, сам на себя иногда ругаюсь. Каждый раз когда захожу на сервисы вопросов и ответов, начинают немного заводить тривиальные вопросы, или когда автор вопроса пытается что-то разрабатывать не прочитав даже минимальную документацию по языку, программе, фреймворку. Таких вопросов стало едва ли не больше половины.

    Понимаю, что ругаться неправильно, и вы видимо несправедливо попали под раздачу. Не хочу трясти ничем ни перед кем, просто иногда слишком сильно раздражаюсь от обилия вопросов, ответ на которые мне кажется тривиальным. Дело даже не в том, что кажется тривиальным, а в том, что сервисы вопросов и ответов стали для многих альтернативой чтению документации и включения головы. Синтаксическая ошибка в программе? Может быть, почитать документацию по языку, о том, как правильно писать такие конструкции? Нет, слишком сложно, пойду на toster.ru/StackOverflow спрошу...
  • Почему Nginx игнорирует правило редиректа в rewrite?

    @immaculate
    Потому что перед тем как писать регулярные выражения, неплохо бы ознакомиться с тем, что это такое и как они работают, какие особенности, что в них означают всякие значки типа плюсиков, звездочек, и т.п.
  • Почему возвращается undefined при попытке получения значения document.getElementById?

    @immaculate
    Вместо таких жутких простыней рекомендую использовать какие-нибудь шаблоны, типа handlebars. Что угодно, только не это. Вам же самому потом придется это поддерживать, неужели вы считаете, что этот вырвиглазный частокол будет легко читать и изменять?...
  • Как реализовать комментарии без доступа к бэкенду?

    @immaculate
    toyvo_glumov: Это Open Source проект. Вряд ли автор это сделает (он написал данный сервер как раз по тем же причинам — терпеть не может рекламу), а если бы и сделал, вы всегда можете использовать предыдущую версию с GitHub.
  • Python sqlite, почему возникает ошибка?

    @immaculate
    Ответ вроде как очевиден и дан вам в сообщении об ошибке: SQLite может работать только в одном потоке, вы же пытаетесь использовать соединение в разных потоках.

    Думаю, есть два варианта: переходить на другую базу, или создавать соединение в каждом потоке, вместо использования единого соединения во всех потоках.
  • Как делать бэкапы Postgresql по-простому?

    @immaculate
    Что-то вы не то читаете. Для вашего случая вполне годится банальный pg_dump.
  • Почему cms на python не такие популярные?

    @immaculate
    CMS есть, например, Wagtail и другие.
    Есть еще Plone, который появился очень давно, и это была безумно крутая вещь для своего времени. Но обратной стороной крутости архитектуры и кода был очень высокий порог входа: знаю проекты на Plone, которые загнулись, потому что не могли найти компетентных специалистов.

    А на PHP только крикни: есть $5 на проект, сразу же сбежится толпа желающих. И видимо результат всех более-менее устраивает.