- 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-ом и уже в самой модели его парсить как надо (а перед перевыкладкой задампить данные и перегнать их в другой формат). Но нет, надо было нагородить еще полей под каждое место где встречалась дата. П..дец, какой же я макакой был...
JloJle4Ka 10.05.2021 15:16 # 0
> slug
> photo
> sex
Должно быть, интересное приложение! :-)
JaneBurt 10.05.2021 15:56 # +1
Возможно. С Питоном работал два года назад да и то в каком-то "ООО Рога и Копыта" как фулстак-макака без команды (а пришел туда совсем зеленым джуном без опыта). Об архитектуре, алгоритмах, структурах данных я тогда особо не думал, вся разработка велась по принципу: "а сделой лишь бы роботало по юзер-стори, можешь со Стэковерфлоу и туториалов скопипастить код". Какие уж там бестпрактисы... Жалкое было зрелище, год назад хоть устроился в компанию с более человечным отношением, развитой ИТ культурой и начал выходить из дефолтного депресняка (ГД десу).
> Должно быть, интересное приложение! :-)
Да обычный корпоративный CRUD. Я могу один раз для таких сделать фреймворк и потом просто на нем генерить справочники с поиском.
PolinaAksenova 10.05.2021 15:25 # +2
Хорошая задачка! А Django ORM умеет строить функционяльные индексы?
Вот SQLAlchemy — умеет:
Теперь можня эффективня выбирать по дате:
guest6 10.05.2021 15:32 # 0
https://docs.djangoproject.com/en/3.2/ref/models/indexes/#django.db.models.Index.expressions
JloJle4Ka 10.05.2021 15:52 # 0
booratihno 10.05.2021 16:03 # 0
Джанго принципиально игнорирует современные тенденции, и позволяет строить неплохие сайты образца 2006-го года. Потому она и восприримается как легаси
JloJle4Ka 10.05.2021 16:09 # 0
booratihno 10.05.2021 16:10 # +1
JloJle4Ka 10.05.2021 16:14 # 0
booratihno 10.05.2021 16:20 # +1
Просто если ты делаешь что-то серьезное, то тебе джанги не хватит.
зы: А вообще ты можешь пройти туториал по джанге на сайте, и сделать себе небольшое приложение типа списка дел или примитивного issue трекера, и составить собссное мнение о джанге
Это займет не больше трех дней
Desktop 24.06.2021 18:26 # 0
- но ведь джанга это самый мощный питонячий фреймворк или я путаю?
JaneBurt 24.06.2021 19:27 # 0
Но там и на Сях больше кода.
Desktop 24.06.2021 20:16 # 0
о как
MAPTbIwKA 24.06.2021 20:06 # +1
``django`` это довольно фуллстечный (то есть описывающий и работу с БД, и с логикой и с шаблонами вывода) фреймворк, который предлагает тебе стать на рельсы, и поехать сразу делая сайты по предлагаемым им схемам.
Если эти схемы тебя устраивают, то всё збс. Иначе получается каша из топора
Desktop 24.06.2021 20:16 # 0
JaneBurt 10.05.2021 16:32 # 0
Ну, для обычного сайта более чем достаточно. Если нужны высокие нагрузки, сложные вычисления держать, лучше переводить (хотя бы часть системы) на Го/Rust/C++ .
> Джанго в этом плане как ПХП
Все же не как пхп. Во фреймворке есть ORM (Пых же в стандартной компектации требует от разработчика писать сырые запросы что требует всегда учитывать возможность SQL инъекций, самому писать классы для однотипных схем), санитайзинг полей в шаблонах по-умолчанию включен (Пых же требует от разработчика самому санитайзить вывод, чтобы XSS не прошло)
booratihno 10.05.2021 16:34 # 0
А что серьезного во внутрекорпоративной хуйне?
тада уж лучше во
https://djangostars.com/blog/10-popular-sites-made-on-django/
Desktop 24.06.2021 18:27 # 0
guest6 10.05.2021 15:33 # +2
зачем поле поле кекса blank?
зачем phone накопипастили, а не вынесли в отдельную таблу?
Про то, что дату так поеблански сделали, а не через функциональные индексы, уже Полина написал
JaneBurt 10.05.2021 16:04 # 0
Да хз. Возможно, костыль для миграций (типа изначально этого поле не было, оно потом добавилось). В проекте куча других подобных полей :)
> зачем phone накопипастили, а не вынесли в отдельную таблу?
Да хз. Можно было сделать many-to-many табличку (или many-to-one относительно телефонного номера), в которой бы еще записывались аттрибуты связи (стационарный/мобильный, домашний/рабочий).
Я в комментарии выше дал пояснение по поводу етих перлов.
guest6 10.05.2021 16:08 # 0
для справки: в джанго миграциях (даже еще когда был south) можно было явно указывать дефолтное значение для нового поля
вот пррямо makemigrations этого требует
bormand 10.05.2021 15:59 # +1
Какой патриархат )))
JaneBurt 10.05.2021 16:06 # +1
JloJle4Ka 10.05.2021 16:08 # +1
guest6 10.05.2021 16:08 # +3
gender = model.Float(min=0.0, max=1.0)
потому что мир не бинарен
JaneBurt 10.05.2021 16:15 # +1
bormand 10.05.2021 16:18 # +2
Имхо, в 99% случаев хватит просто pronoun'а, чтобы знать как к юзерам обращаться в интерфейсе/письмах. А инфа о том, что они воображают себя вертолётом, на практике всё равно не пригодится. Да и биологический пол тоже бесполезен.
JaneBurt 10.05.2021 16:24 # +1
booratihno 10.05.2021 16:25 # +2
и номер военника
bormand 10.05.2021 16:29 # 0
Кстати, а вот если тян устраивается в полицию и т.п., ей тоже надо пройти службу?
booratihno 10.05.2021 16:30 # 0
Знаю женщину, у которой в военнике написано, что она сержант медслужбы, и в случае войны пойдет медсестрой
Soul_re@ver 10.05.2021 16:37 # 0
Desktop 24.06.2021 18:30 # 0
JaneBurt 10.05.2021 16:34 # 0
bormand 10.05.2021 16:35 # +2
Ну, если это не больница какая-нибудь.
PolinaAksenova 10.05.2021 16:37 # +3
А бывают гинекологические клиники для мужчин? Чтобы туда ходили биологические девочки, идентифицирующие себя как мальчики.
Soul_re@ver 10.05.2021 16:41 # +3
booratihno 10.05.2021 16:42 # 0
JaneBurt 10.05.2021 16:49 # 0
booratihno 10.05.2021 17:00 # 0
bormand 10.05.2021 17:00 # +1
booratihno 10.05.2021 17:01 # 0
и apache точно также
там свой
https://man.openbsd.org/httpd.8
bormand 10.05.2021 17:05 # 0
CHayT 10.05.2021 17:06 # 0
bormand 10.05.2021 17:07 # 0
booratihno 10.05.2021 17:11 # 0
Сервер http -- httpd
Сервер почты -- smtpd
За ftp отвечает демон ftpd
никакой магии!
bormand 10.05.2021 17:14 # 0
Ну т.е. из интерфейса там одно название, а дальше ебись как хочешь и пытайся понять какую именно реализацию тебе подсунули?
booratihno 10.05.2021 17:19 # 0
Вообще когда-то было так:
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), и не будет путаться с этим
gologub 24.06.2021 18:36 # 0
booratihno 10.05.2021 17:08 # 0
вот сырцы
https://github.com/openbsd/src/tree/master/usr.sbin/httpd
Desktop 24.06.2021 18:39 # 0
HEu3BECTHblu_nemyx 24.06.2021 18:49 # +1
bormand 10.05.2021 16:41 # +1
Soul_re@ver 10.05.2021 16:38 # +4
JaneBurt 10.05.2021 16:40 # 0
JaneBurt 10.05.2021 16:46 # 0
bormand 10.05.2021 16:50 # 0
Ну не всегда нового специалиста можно найти/подготовить за месяц. Хотя зависит от бизнеса, конечно.
Soul_re@ver 10.05.2021 16:51 # +2
Угу, а потом он возвращается, подаёт в суд за незаконное увольнение и получет зарплату за всё время, которое не работал. Самое смешное, что если бы его не уволили, платить бы её не пришлось.
В принципе, бизносу, торгующему помидорами на рынке, насрать — наймут кого-то еще и уволят нахуй первого по возвращению, повод найдут. А если бизнос решит бюджет попилить и в закупках поучаствовать, то ему ТК лучше соблюдать — себе же дороже будет.
bormand 10.05.2021 16:56 # 0
Лол, это как декрет что ли, место сохраняется?
PolinaAksenova 10.05.2021 16:59 # +1
Soul_re@ver 10.05.2021 17:06 # 0
И ещё на госслужбе.
В общем, эта хуйня — ещё один повод откосить от армии.
Soul_re@ver 10.05.2021 17:01 # 0
bormand 10.05.2021 16:27 # 0
Атавизм из прошлого, как мне кажется. Тут опять же хватило бы pronoun'а, чтобы знать как к обладателю паспорта обращаться. И куча проблем ушла бы.
Soul_re@ver 10.05.2021 16:28 # +1
Нужно же как-то определять, в какие туалеты кого пускать.
booratihno 10.05.2021 16:31 # +2
На DjangoCon Europe туалет для всех общий как раз потому, что не всегда понятно кому в какой идти
bormand 10.05.2021 16:33 # +4
Ну просто надо делать нормальные туалеты. А не лунки в полу без всяких там перегородок между ними, как у нас в школе были...
booratihno 10.05.2021 16:38 # +2
в женских толчках могут стоять автоматы по продаже гигиенических штук, и не факт, что тян приятно их покупать при мужиках
тем не менее, на это стали забивать
bormand 10.05.2021 16:48 # +1
Я думаю большинству просто похуй. В конце-концов в супермаркете они всё это при мужиках покупают.
guest6 10.05.2021 19:57 # +2
bormand 10.05.2021 20:03 # +1
JloJle4Ka 10.05.2021 16:47 # +1
bormand 10.05.2021 20:16 # +2
Ну вот зачем ущемлять права котодевочек?
booratihno 10.05.2021 16:29 # +3
CHayT 10.05.2021 16:43 # +2
Надо ещё разрешить выдавать паспорт девочки-волшебницы, чтобы с ним можно было не работать, и чтобы бесплатные тортики полагались.
Soul_re@ver 10.05.2021 16:46 # +5
По куче аниме документальным свидетельствам, девочки волшебницы пашут в конских условиях: ненормированный рабочий день, нет отпусков и выходных, зачастую переработки и ночные смены, условия ТБ на рабочих местах не соблюдена...
CHayT 10.05.2021 16:48 # +3