1. Python / Говнокод #27415

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 10 Мая 2021

    Комментарии (76) 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)
      Ответить
      • вот ток-ток завезли
        https://docs.djangoproject.com/en/3.2/ref/models/indexes/#django.db.models.Index.expressions
        Ответить
      • Я недавно читал нахрюк про джангу, что из неё рано или поздно придётся выкинуть шаблонизатор и ORM, т.е. легче просто начать с фласком. Да и вообще на Джанго смотрят как на какое-то «legacy».
        Ответить
        • у джанго слабый ORM и противный шаблонизатор. Сила джанги в синергии, в том, что все из коробки друг с дружкой связано (примерно как в виндовых сетях)

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

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


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

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

                    - но ведь джанга это самый мощный питонячий фреймворк или я путаю?
                    Ответить
                    • Не. Самый мощный Japronto - https://github.com/squeaky-pl/japronto

                      Но там и на Сях больше кода.
                      Ответить
                      • There is no new project development happening at the moment, but it's not abandoned either.

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

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

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

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

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

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

                    тада уж лучше во
                    https://djangostars.com/blog/10-popular-sites-made-on-django/
                    Ответить
    • фу, что за кодстайл?
      зачем поле поле кекса blank?

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

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

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

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

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

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

          вот пррямо makemigrations этого требует
          Ответить
    • > default='Male'

      Какой патриархат )))
      Ответить
      • А надо было default='DemisexualGenderQuestioningSemi humanRabbit' ?)
        Ответить
        • Ты зачем так дам обзываешь? Они, вообще-то, тоже читают говнокод.
          Ответить
        • а надо было

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

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

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

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

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

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

                                и apache точно также

                                там свой
                                https://man.openbsd.org/httpd.8
                                Ответить
                                • А, "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), и не будет путаться с этим
                                            Ответить
                                        • pazuzud
                                          Ответить
                                  • это обычный сервер, очень минималистичный

                                    вот сырцы
                                    https://github.com/openbsd/src/tree/master/usr.sbin/httpd
                                    Ответить
                            • хороший вертолёт же
                              Ответить
                        • Ну платные возможно есть. Но что-то мне намекает, что им приходится сидеть в обычной очереди, где все на них косятся.
                          Ответить
                    • Если есть номер военника бизнос знает, что хуй не свалит на год в ебеня, заняв должность на которую можно нанять только заместителя, которого через год придётся пидорнуть и ебаться с потерявшим год сотрудником.
                      Ответить
                      • [deleted]
                        Ответить
                      • Какая бизнесу разница, как свалит хуй на год в ебеня? Свалит - уволят через пару недель и найдут замену. А директора компаний уже почти все отслужили (или откосили) в армии как правило. Система - справочник о компаниях и связанных с ними лицах, проектах вообще. Если есть хоть одно активное лицо в компании, то можно к нему обратиться.
                        Ответить
                        • > найдут замену

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

                          В принципе, бизносу, торгующему помидорами на рынке, насрать — наймут кого-то еще и уволят нахуй первого по возвращению, повод найдут. А если бизнос решит бюджет попилить и в закупках поучаствовать, то ему ТК лучше соблюдать — себе же дороже будет.
                          Ответить
                          • > а потом он возвращается

                            Лол, это как декрет что ли, место сохраняется?
                            Ответить
                            • Пишут, что всё таки нят: https://pravovest-audit.ru/nashi-statii-nalogi-i-buhuchet/trudovye-otnosheniya-s-sotrudnikom-prizyvaemym-na-voennuyu-sluzhbu/.
                              Ответить
                              • Да, действительно. Считал, что действует та же схема, как и с предоставлением отпуска по уходу за ребёнком. На самом деле это у нас это так работает, а не по закону.

                                И ещё на госслужбе.

                                В общем, эта хуйня — ещё один повод откосить от армии.
                                Ответить
                            • [deleted]
                              Ответить
                • > в паспорте же указывают пол

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

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

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

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

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

                        Ну вот зачем ущемлять права котодевочек?
                        Ответить
                  • default="they"
                    Ответить
                  • > И куча проблем ушла бы.

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

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

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