- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 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-ом и уже в самой модели его парсить как надо (а перед перевыкладкой задампить данные и перегнать их в другой формат). Но нет, надо было нагородить еще полей под каждое место где встречалась дата. П..дец, какой же я макакой был...
> slug
> photo
> sex
Должно быть, интересное приложение! :-)
Возможно. С Питоном работал два года назад да и то в каком-то "ООО Рога и Копыта" как фулстак-макака без команды (а пришел туда совсем зеленым джуном без опыта). Об архитектуре, алгоритмах, структурах данных я тогда особо не думал, вся разработка велась по принципу: "а сделой лишь бы роботало по юзер-стори, можешь со Стэковерфлоу и туториалов скопипастить код". Какие уж там бестпрактисы... Жалкое было зрелище, год назад хоть устроился в компанию с более человечным отношением, развитой ИТ культурой и начал выходить из дефолтного депресняка (ГД десу).
> Должно быть, интересное приложение! :-)
Да обычный корпоративный CRUD. Я могу один раз для таких сделать фреймворк и потом просто на нем генерить справочники с поиском.
Хорошая задачка! А Django ORM умеет строить функционяльные индексы?
Вот SQLAlchemy — умеет:
Теперь можня эффективня выбирать по дате:
https://docs.djangoproject.com/en/3.2/ref/models/indexes/#django.db.models.Index.expressions
Джанго принципиально игнорирует современные тенденции, и позволяет строить неплохие сайты образца 2006-го года. Потому она и восприримается как легаси
Просто если ты делаешь что-то серьезное, то тебе джанги не хватит.
зы: А вообще ты можешь пройти туториал по джанге на сайте, и сделать себе небольшое приложение типа списка дел или примитивного issue трекера, и составить собссное мнение о джанге
Это займет не больше трех дней
- но ведь джанга это самый мощный питонячий фреймворк или я путаю?
Но там и на Сях больше кода.
о как
``django`` это довольно фуллстечный (то есть описывающий и работу с БД, и с логикой и с шаблонами вывода) фреймворк, который предлагает тебе стать на рельсы, и поехать сразу делая сайты по предлагаемым им схемам.
Если эти схемы тебя устраивают, то всё збс. Иначе получается каша из топора
Ну, для обычного сайта более чем достаточно. Если нужны высокие нагрузки, сложные вычисления держать, лучше переводить (хотя бы часть системы) на Го/Rust/C++ .
> Джанго в этом плане как ПХП
Все же не как пхп. Во фреймворке есть ORM (Пых же в стандартной компектации требует от разработчика писать сырые запросы что требует всегда учитывать возможность SQL инъекций, самому писать классы для однотипных схем), санитайзинг полей в шаблонах по-умолчанию включен (Пых же требует от разработчика самому санитайзить вывод, чтобы XSS не прошло)
А что серьезного во внутрекорпоративной хуйне?
тада уж лучше во
https://djangostars.com/blog/10-popular-sites-made-on-django/
зачем поле поле кекса blank?
зачем phone накопипастили, а не вынесли в отдельную таблу?
Про то, что дату так поеблански сделали, а не через функциональные индексы, уже Полина написал
Да хз. Возможно, костыль для миграций (типа изначально этого поле не было, оно потом добавилось). В проекте куча других подобных полей :)
> зачем phone накопипастили, а не вынесли в отдельную таблу?
Да хз. Можно было сделать many-to-many табличку (или many-to-one относительно телефонного номера), в которой бы еще записывались аттрибуты связи (стационарный/мобильный, домашний/рабочий).
Я в комментарии выше дал пояснение по поводу етих перлов.
для справки: в джанго миграциях (даже еще когда был south) можно было явно указывать дефолтное значение для нового поля
вот пррямо makemigrations этого требует
Какой патриархат )))
gender = model.Float(min=0.0, max=1.0)
потому что мир не бинарен
Имхо, в 99% случаев хватит просто pronoun'а, чтобы знать как к юзерам обращаться в интерфейсе/письмах. А инфа о том, что они воображают себя вертолётом, на практике всё равно не пригодится. Да и биологический пол тоже бесполезен.
и номер военника
Кстати, а вот если тян устраивается в полицию и т.п., ей тоже надо пройти службу?
Знаю женщину, у которой в военнике написано, что она сержант медслужбы, и в случае войны пойдет медсестрой
Ну, если это не больница какая-нибудь.
А бывают гинекологические клиники для мужчин? Чтобы туда ходили биологические девочки, идентифицирующие себя как мальчики.
и apache точно также
там свой
https://man.openbsd.org/httpd.8
Сервер http -- httpd
Сервер почты -- smtpd
За ftp отвечает демон ftpd
никакой магии!
Ну т.е. из интерфейса там одно название, а дальше ебись как хочешь и пытайся понять какую именно реализацию тебе подсунули?
Вообще когда-то было так:
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), и не будет путаться с этим
вот сырцы
https://github.com/openbsd/src/tree/master/usr.sbin/httpd
Ну не всегда нового специалиста можно найти/подготовить за месяц. Хотя зависит от бизнеса, конечно.
Угу, а потом он возвращается, подаёт в суд за незаконное увольнение и получет зарплату за всё время, которое не работал. Самое смешное, что если бы его не уволили, платить бы её не пришлось.
В принципе, бизносу, торгующему помидорами на рынке, насрать — наймут кого-то еще и уволят нахуй первого по возвращению, повод найдут. А если бизнос решит бюджет попилить и в закупках поучаствовать, то ему ТК лучше соблюдать — себе же дороже будет.
Лол, это как декрет что ли, место сохраняется?
И ещё на госслужбе.
В общем, эта хуйня — ещё один повод откосить от армии.
Атавизм из прошлого, как мне кажется. Тут опять же хватило бы pronoun'а, чтобы знать как к обладателю паспорта обращаться. И куча проблем ушла бы.
Нужно же как-то определять, в какие туалеты кого пускать.
На DjangoCon Europe туалет для всех общий как раз потому, что не всегда понятно кому в какой идти
Ну просто надо делать нормальные туалеты. А не лунки в полу без всяких там перегородок между ними, как у нас в школе были...
в женских толчках могут стоять автоматы по продаже гигиенических штук, и не факт, что тян приятно их покупать при мужиках
тем не менее, на это стали забивать
Я думаю большинству просто похуй. В конце-концов в супермаркете они всё это при мужиках покупают.
Ну вот зачем ущемлять права котодевочек?
Надо ещё разрешить выдавать паспорт девочки-волшебницы, чтобы с ним можно было не работать, и чтобы бесплатные тортики полагались.
По куче аниме документальным свидетельствам, девочки волшебницы пашут в конских условиях: ненормированный рабочий день, нет отпусков и выходных, зачастую переработки и ночные смены, условия ТБ на рабочих местах не соблюдена...