Змея / Говнокод #27415 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
class Contacts(models.Model):
    GENDER_CHOICES = (('Male', 'male'), ('Female', 'female')) 
    # Мужик должен служить в армии и пахать в поле или на заводе, а баба - варить борщи и рожать детей...
    
    slug = models.SlugField(max_length=250, default='', blank=True)
    FirstName = models.CharField(max_length=50, blank=True, null=True)
    LastName = models.CharField(max_length=50, blank=True, null=True)
    MiddleName = models.CharField(max_length=50, blank=True, null=True)
    Photo = models.ImageField(upload_to='images/contacts/', blank=True, null=True)
    Sex = models.CharField(max_length=50, choices=GENDER_CHOICES, default='Male', blank=True, null=True)
    Birthday = models.DateField(blank=True, null=True)
    BirthdayDay = models.CharField(blank=True, null=True, max_length=2, validators=[validators.validate_date_day])
    BirthdayMonth = models.CharField(blank=True, null=True, max_length=2, validators=[validators.validate_date_month])
    BirthdayYear = models.CharField(blank=True, null=True, max_length=4)
    
    ContactPhone = models.CharField(max_length=50, blank=True, null=True, validators=[validators.validate_phone])
    ContactPhoneCode = models.ForeignKey('PhoneNumberCode', on_delete=models.SET_NULL, related_name='ContactPhoneCode', blank=True, null=True)
    ContactPhoneNumber = models.CharField(max_length=50, blank=True, null=True, validators=[validators.validate_phone_number])
    ContactPhoneLocal = models.BooleanField(default=False)
    
    WorkPhone = models.CharField(max_length=50, blank=True, null=True, validators=[validators.validate_phone])
    WorkPhoneCode = models.ForeignKey('PhoneNumberCode', on_delete=models.SET_NULL, related_name='WorkPhoneCode', blank=True, null=True)
    WorkPhoneNumber = models.CharField(max_length=50, blank=True, null=True, validators=[validators.validate_phone_number])
    WorkPhoneLocal = models.BooleanField(default=False)
    
    MobilePhone = models.CharField(max_length=50, blank=True, null=True, validators=[validators.validate_phone])
    MobilePhoneCode = models.ForeignKey('PhoneNumberCode', on_delete=models.SET_NULL, related_name='MobilePhoneCode', blank=True, null=True)
    MobilePhoneNumber = models.CharField(max_length=50, blank=True, null=True, validators=[validators.validate_phone_number])
    MobilePhoneLocal = models.BooleanField(default=False)
    
    WorkMobilePhone = models.CharField(max_length=50, blank=True, null=True, validators=[validators.validate_phone])
    WorkMobilePhoneCode = models.ForeignKey('PhoneNumberCode', on_delete=models.SET_NULL, related_name='WorkMobilePhoneCode', blank=True, null=True)
    WorkMobilePhoneNumber = models.CharField(max_length=50, blank=True, null=True, validators=[validators.validate_phone_number])
    WorkMobilePhoneLocal = models.BooleanField(default=False)

По Birthday была дана задача: "а сделай так, чтобы можно было выбирать не только полную дату, но и только день/только месяц/только год". А вот каким боком потребовалось выделять в отдельные поля составляющие телефонных номеров, даже для меня до сих пор загадка. Возможно, из той же оперы: "нужно, чтобы можно было вводить неполный номер". Как бы там ни было, можно было сделать отдельный custom field (в Джанго тем более для этого есть API - https://docs.djangoproject.com/en/3.2/howto/custom-model-fields/ ) или хотя бы сделать поле CharField-ом и уже в самой модели его парсить как надо (а перед перевыкладкой задампить данные и перегнать их в другой формат). Но нет, надо было нагородить еще полей под каждое место где встречалась дата. П..дец, какой же я макакой был...

Запостил: JaneBurt JaneBurt, (Updated )

Комментарии (80) RSS

  • Я правильно понимаю, что это идиоматичный питонокод?

    > slug
    > photo
    > sex

    Должно быть, интересное приложение! 🙂
    Ответить
    • > Я правильно понимаю, что это идиоматичный питонокод?

      Возможно. С Питоном работал два года назад да и то в каком-то "ООО Рога и Копыта" как фулстак-макака без команды (а пришел туда совсем зеленым джуном без опыта). Об архитектуре, алгоритмах, структурах данных я тогда особо не думал, вся разработка велась по принципу: "а сделой лишь бы роботало по юзер-стори, можешь со Стэковерфлоу и туториалов скопипастить код". Какие уж там бестпрактисы... Жалкое было зрелище, год назад хоть устроился в компанию с более человечным отношением, развитой ИТ культурой и начал выходить из дефолтного депресняка (ГД десу).

      > Должно быть, интересное приложение! 🙂

      Да обычный корпоративный CRUD. Я могу один раз для таких сделать фреймворк и потом просто на нем генерить справочники с поиском.
      Ответить
  • > чтобы можно было выбирать не только полную дату, но и только день/только месяц/только год
    Хорошая задачка! А Django ORM умеет строить функционяльные индексы?
    Вот SQLAlchemy — умеет:
    __table_args__ = (
        Index('ix_some_shit',
              func.year(date)  # CREATE INDEX ... ON Contacts (YEAR(date));
        ),
    )

    Теперь можня эффективня выбирать по дате:
    query(Contacts).(...).where(func.year(Contacts.date) == 2001)
    Ответить
    • Я недавно читал нахрюк про джангу, что из неё рано или поздно придётся выкинуть шаблонизатор и ORM, т.е. легче просто начать с фласком. Да и вообще на Джанго смотрят как на какое-то «legacy».
      Ответить
      • у джанго слабый ORM и противный шаблонизатор. Сила джанги в синергии, в том, что все из коробки друг с дружкой связано (примерно как в виндовых сетях)

        Джанго принципиально игнорирует современные тенденции, и позволяет строить неплохие сайты образца 2006-го года. Потому она и восприримается как легаси
        Ответить
          • да не всегда плохо, в обшем-то. Наваять относительно несложный сайт-морду к субд на ней можно легко и безопасно
            Ответить
            • Да, Джанго в этом плане как ПХП, только гораздо лучше. Для более серьёзных проектов есть более серьёзные инструменты.
              Ответить
              • джанго всё же не как пхп: там DRY, относительно четкое отделение логики от представления, генераторы URL, ORM, к томуже она намного безопаснее

                Просто если ты делаешь что-то серьезное, то тебе джанги не хватит.


                зы: А вообще ты можешь пройти туториал по джанге на сайте, и сделать себе небольшое приложение типа списка дел или примитивного issue трекера, и составить собссное мнение о джанге

                Это займет не больше трех дней
                Ответить
                • > Просто если ты делаешь что-то серьезное, то тебе джанги не хватит.

                  - но ведь джанга это самый мощный питонячий фреймворк или я путаю?
                  Ответить
                    • There is no new project development happening at the moment, but it's not abandoned either.

                      о как
                      Ответить
                  • define "мощный" 🙂

                    ``django`` это довольно фуллстечный (то есть описывающий и работу с БД, и с логикой и с шаблонами вывода) фреймворк, который предлагает тебе стать на рельсы, и поехать сразу делая сайты по предлагаемым им схемам.

                    Если эти схемы тебя устраивают, то всё збс. Иначе получается каша из топора
                    Ответить
              • Джанго используют например для внутрикорпоративной х..ни в Мейле. Также она при помощи оптимизирующих визардов роботает в Фейсбуке. Куда уж серьезнее то?

                Ну, для обычного сайта более чем достаточно. Если нужны высокие нагрузки, сложные вычисления держать, лучше переводить (хотя бы часть системы) на Го/Rust/C++ .

                > Джанго в этом плане как ПХП

                Все же не как пхп. Во фреймворке есть ORM (Пых же в стандартной компектации требует от разработчика писать сырые запросы что требует всегда учитывать возможность SQL инъекций, самому писать классы для однотипных схем), санитайзинг полей в шаблонах по-умолчанию включен (Пых же требует от разработчика самому санитайзить вывод, чтобы XSS не прошло)
                Ответить
  • фу, что за кодстайл?
    зачем поле поле кекса blank?

    зачем phone накопипастили, а не вынесли в отдельную таблу?

    Про то, что дату так поеблански сделали, а не через функциональные индексы, уже Полина написал
    Ответить
    • > зачем поле поле кекса blank?

      Да хз. Возможно, костыль для миграций (типа изначально этого поле не было, оно потом добавилось). В проекте куча других подобных полей 🙂

      > зачем phone накопипастили, а не вынесли в отдельную таблу?

      Да хз. Можно было сделать many-to-many табличку (или many-to-one относительно телефонного номера), в которой бы еще записывались аттрибуты связи (стационарный/мобильный, домашний/рабочий).

      Я в комментарии выше дал пояснение по поводу етих перлов.
      Ответить
      • >костыль для миграций
        для справки: в джанго миграциях (даже еще когда был south) можно было явно указывать дефолтное значение для нового поля

        вот пррямо makemigrations этого требует
        Ответить
      • Ты зачем так дам обзываешь? Они, вообще-то, тоже читают говнокод.
        Ответить
      • а надо было

        gender = model.Float(min=0.0, max=1.0)

        потому что мир не бинарен
        Ответить
        • Я тогда сам был за небинарное поле гендора кек (типа сделоть Male/Female/Custom). Но владелец фирмы сказал: "у нас не Европа". Ну я бы тоже сейчас оставил для етого поля только два значения (кого в бизносе волнуют твои болячки кек, да и зачем их мешать в одну кучу к биологическому полу?).
          Ответить
          • Зачем вообще сайтам знать о gender'е пользователей, если это не какой-нибудь там сайт знакомств?

            Имхо, в 99% случаев хватит просто pronoun'а, чтобы знать как к юзерам обращаться в интерфейсе/письмах. А инфа о том, что они воображают себя вертолётом, на практике всё равно не пригодится. Да и биологический пол тоже бесполезен.
            Ответить
            • Ну так в паспорте же указывают пол, значит и в системе должна быть эта информация. Ну да, пригодится для различения pronoun-а (в русском, английском, немецком личные местоимения третьего лица различаются по роду) как минимум.
              Ответить
                • > военника

                  Кстати, а вот если тян устраивается в полицию и т.п., ей тоже надо пройти службу?
                  Ответить
                  • не знаю) но военники у тян бывают, бывают военные кафедры всякие

                    Знаю женщину, у которой в военнике написано, что она сержант медслужбы, и в случае войны пойдет медсестрой
                    Ответить
                  • Нет. Да и куну ФОРМАЛЬНО не обязательно. Просто их стараются не брать, потому что отсрочки у них нет, они здоровы и их в следующий призыв загребут всё равно, прошедшие армию уже половину всего, что нужно, знают и мороки с ними меньше.
                    Ответить
                  • чтоб устроиться куда-то выше, чем участковым, вроде надо спецбурсу закончить, а там та же самая армия
                    Ответить
                  • Пол тоже. Бизнесу ведь просто надо знать, как обратиться к клиенту при звонке или в письме.

                    Ну, если это не больница какая-нибудь.
                    Ответить
                    • > Ну, если это не больница какая-нибудь.
                      А бывают гинекологические клиники для мужчин? Чтобы туда ходили биологические девочки, идентифицирующие себя как мальчики.
                      Ответить
                      • Ну, гинекологи/андрологи как раз занимаются БИОЛОГИЧЕСКИМИ проблемами женщин/мужчин. Им вообще похуй небинарный майонез ты или вертолёт апач.
                        Ответить
                          • Чтобы выложить очередной лендос на ВордПрессе например
                            Ответить
                              • А, "httpd" -- это такой интерфейс, который могут реализовывать всякие апачи и прочие? А спека есть какая-то на абстрактный httpd?
                                Ответить
                                • Нет, вроде это standalone сервант, видел его во всякой не в меру умной питушне.
                                  Ответить
                                  • Ну просто апач ведь тоже httpd, значит какие-то общие аргументы и т.п. у них должны быть? Не будут же джве не связанные друг с другом фигни называть одинаково.
                                    Ответить
                                    • Почему не будут?

                                      Сервер http -- httpd
                                      Сервер почты -- smtpd
                                      За ftp отвечает демон ftpd

                                      никакой магии!
                                      Ответить
                                      • > никакой магии

                                        Ну т.е. из интерфейса там одно название, а дальше ебись как хочешь и пытайся понять какую именно реализацию тебе подсунули?
                                        Ответить
                                        • Да, это не как postfixовая эмуляция трех опций sendmail, если ты об этом.



                                          Вообще когда-то было так:

                                          OpenBSD provides a custom Apache server, httpd(8), in the base system
                                          which has been audited for security and may run in a chroot(2)
                                          environment. Users are STRONGLY encouraged to use the system httpd
                                          rather than this port.


                                          Затем его заменили на собственный сервер


                                          В 99.99% случаев люди просто получают httpd с base system и текут

                                          Если они захотят поставить apache из портов, то он окажется по другому пути (внещние тулы ставятся в /usr/local), и не будет путаться с этим
                                          Ответить
                      • Ну платные возможно есть. Но что-то мне намекает, что им приходится сидеть в обычной очереди, где все на них косятся.
                        Ответить
                  • Если есть номер военника бизнос знает, что хуй не свалит на год в ебеня, заняв должность на которую можно нанять только заместителя, которого через год придётся пидорнуть и ебаться с потерявшим год сотрудником.
                    Ответить
                    • Какая бизнесу разница, как свалит хуй на год в ебеня? Свалит - уволят через пару недель и найдут замену. А директора компаний уже почти все отслужили (или откосили) в армии как правило. Система - справочник о компаниях и связанных с ними лицах, проектах вообще. Если есть хоть одно активное лицо в компании, то можно к нему обратиться.
                      Ответить
              • > в паспорте же указывают пол

                Атавизм из прошлого, как мне кажется. Тут опять же хватило бы pronoun'а, чтобы знать как к обладателю паспорта обращаться. И куча проблем ушла бы.
                Ответить
                • > Атавизм из прошлого
                  Нужно же как-то определять, в какие туалеты кого пускать.
                  Ответить
                  • От этого отказались как раз.
                    На DjangoCon Europe туалет для всех общий как раз потому, что не всегда понятно кому в какой идти
                    Ответить
                    • > туалет для всех общий

                      Ну просто надо делать нормальные туалеты. А не лунки в полу без всяких там перегородок между ними, как у нас в школе были...
                      Ответить
                      • дело не только в кабинках кмк: пердеть там внутри когда за стеночкой существо другого пола не всем приятно

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

                        тем не менее, на это стали забивать
                        Ответить
                        • > не факт, что тян приятно их покупать при мужиках

                          Я думаю большинству просто похуй. В конце-концов в супермаркете они всё это при мужиках покупают.
                          Ответить
                        • Ни разу не видел в женских толчках никаких автоматов.
                          Ответить
                          • Ну это где-нибудь в европе наверное или в москве... А у нас хотя бы мыло и салфетки есть -- и то радость.
                            Ответить
                  • Мужчинам надо в мужской, а женщинам – в женский. Остальным – в лоток.
                    Ответить
                    • > Остальным – в лоток.

                      Ну вот зачем ущемлять права котодевочек?
                      Ответить
                  • Мужчинам надо в мужской, а женщинам – в женский. Остальным – в лоток.
                    Ответить
                • > И куча проблем ушла бы.

                  Надо ещё разрешить выдавать паспорт девочки-волшебницы, чтобы с ним можно было не работать, и чтобы бесплатные тортики полагались.
                  Ответить
                  • > можно было не работать

                    По куче аниме документальным свидетельствам, девочки волшебницы пашут в конских условиях: ненормированный рабочий день, нет отпусков и выходных, зачастую переработки и ночные смены, условия ТБ на рабочих местах не соблюдена...
                    Ответить
                    • Ну это ясно, поэтому и надо в немагическом мире нас защищать. Иначе зло победит. Вдруг война, а я устала.
                      Ответить
                    • Ну это ясно, поэтому и надо в немагическом мире нас защищать. Иначе зло победит. Вдруг война, а я устала.
                      Ответить
                  • > можно было не работать

                    По куче аниме документальным свидетельствам, девочки волшебницы пашут в конских условиях: ненормированный рабочий день, нет отпусков и выходных, зачастую переработки и ночные смены, условия ТБ на рабочих местах не соблюдена...
                    Ответить

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8