- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 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 # 0
> slug
> photo
> sex
Должно быть, интересное приложение! 🙂
JaneBurt # 0 ⇈
Возможно. С Питоном работал два года назад да и то в каком-то "ООО Рога и Копыта" как фулстак-макака без команды (а пришел туда совсем зеленым джуном без опыта). Об архитектуре, алгоритмах, структурах данных я тогда особо не думал, вся разработка велась по принципу: "а сделой лишь бы роботало по юзер-стори, можешь со Стэковерфлоу и туториалов скопипастить код". Какие уж там бестпрактисы... Жалкое было зрелище, год назад хоть устроился в компанию с более человечным отношением, развитой ИТ культурой и начал выходить из дефолтного депресняка (ГД десу).
> Должно быть, интересное приложение! 🙂
Да обычный корпоративный CRUD. Я могу один раз для таких сделать фреймворк и потом просто на нем генерить справочники с поиском.
PolinaAksenova # 0
Хорошая задачка! А Django ORM умеет строить функционяльные индексы?
Вот SQLAlchemy — умеет:
Теперь можня эффективня выбирать по дате:
guest # 0 ⇈
https://docs.djangoproject.com/en/3.2/ref/models/indexes/#django.db.models.Index.expressions
JloJle4Ka # 0 ⇈
booratihno # 0 ⇈
Джанго принципиально игнорирует современные тенденции, и позволяет строить неплохие сайты образца 2006-го года. Потому она и восприримается как легаси
JloJle4Ka # 0 ⇈
booratihno # 0 ⇈
JloJle4Ka # 0 ⇈
booratihno # 0 ⇈
Просто если ты делаешь что-то серьезное, то тебе джанги не хватит.
зы: А вообще ты можешь пройти туториал по джанге на сайте, и сделать себе небольшое приложение типа списка дел или примитивного issue трекера, и составить собссное мнение о джанге
Это займет не больше трех дней
Desktop # 0 ⇈
- но ведь джанга это самый мощный питонячий фреймворк или я путаю?
JaneBurt # 0 ⇈
Но там и на Сях больше кода.
Desktop # 0 ⇈
о как
MAPTbIwKA # 0 ⇈
``django`` это довольно фуллстечный (то есть описывающий и работу с БД, и с логикой и с шаблонами вывода) фреймворк, который предлагает тебе стать на рельсы, и поехать сразу делая сайты по предлагаемым им схемам.
Если эти схемы тебя устраивают, то всё збс. Иначе получается каша из топора
Desktop # 0 ⇈
JaneBurt # 0 ⇈
Ну, для обычного сайта более чем достаточно. Если нужны высокие нагрузки, сложные вычисления держать, лучше переводить (хотя бы часть системы) на Го/Rust/C++ .
> Джанго в этом плане как ПХП
Все же не как пхп. Во фреймворке есть ORM (Пых же в стандартной компектации требует от разработчика писать сырые запросы что требует всегда учитывать возможность SQL инъекций, самому писать классы для однотипных схем), санитайзинг полей в шаблонах по-умолчанию включен (Пых же требует от разработчика самому санитайзить вывод, чтобы XSS не прошло)
booratihno # 0 ⇈
А что серьезного во внутрекорпоративной хуйне?
тада уж лучше во
https://djangostars.com/blog/10-popular-sites-made-on-django/
Desktop # 0 ⇈
guest # 0
зачем поле поле кекса blank?
зачем phone накопипастили, а не вынесли в отдельную таблу?
Про то, что дату так поеблански сделали, а не через функциональные индексы, уже Полина написал
JaneBurt # 0 ⇈
Да хз. Возможно, костыль для миграций (типа изначально этого поле не было, оно потом добавилось). В проекте куча других подобных полей 🙂
> зачем phone накопипастили, а не вынесли в отдельную таблу?
Да хз. Можно было сделать many-to-many табличку (или many-to-one относительно телефонного номера), в которой бы еще записывались аттрибуты связи (стационарный/мобильный, домашний/рабочий).
Я в комментарии выше дал пояснение по поводу етих перлов.
guest # 0 ⇈
для справки: в джанго миграциях (даже еще когда был south) можно было явно указывать дефолтное значение для нового поля
вот пррямо makemigrations этого требует
bormand # 0
Какой патриархат )))
JaneBurt # 0 ⇈
JloJle4Ka # 0 ⇈
guest # 0 ⇈
gender = model.Float(min=0.0, max=1.0)
потому что мир не бинарен
JaneBurt # 0 ⇈
bormand # 0 ⇈
Имхо, в 99% случаев хватит просто pronoun'а, чтобы знать как к юзерам обращаться в интерфейсе/письмах. А инфа о том, что они воображают себя вертолётом, на практике всё равно не пригодится. Да и биологический пол тоже бесполезен.
JaneBurt # 0 ⇈
booratihno # 0 ⇈
и номер военника
bormand # 0 ⇈
Кстати, а вот если тян устраивается в полицию и т.п., ей тоже надо пройти службу?
booratihno # 0 ⇈
Знаю женщину, у которой в военнике написано, что она сержант медслужбы, и в случае войны пойдет медсестрой
[email protected] # 0 ⇈
Desktop # 0 ⇈
JaneBurt # 0 ⇈
bormand # 0 ⇈
Ну, если это не больница какая-нибудь.
PolinaAksenova # 0 ⇈
А бывают гинекологические клиники для мужчин? Чтобы туда ходили биологические девочки, идентифицирующие себя как мальчики.
[email protected] # 0 ⇈
booratihno # 0 ⇈
JaneBurt # 0 ⇈
booratihno # 0 ⇈
bormand # 0 ⇈
booratihno # 0 ⇈
и apache точно также
там свой
https://man.openbsd.org/httpd.8
bormand # 0 ⇈
CHayT # 0 ⇈
bormand # 0 ⇈
booratihno # 0 ⇈
Сервер http -- httpd
Сервер почты -- smtpd
За ftp отвечает демон ftpd
никакой магии!
bormand # 0 ⇈
Ну т.е. из интерфейса там одно название, а дальше ебись как хочешь и пытайся понять какую именно реализацию тебе подсунули?
booratihno # 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 # 0 ⇈
booratihno # 0 ⇈
вот сырцы
https://github.com/openbsd/src/tree/master/usr.sbin/httpd
Desktop # 0 ⇈
HEu3BECTHblu_nemyx # 0 ⇈
bormand # 0 ⇈
[email protected] # 0 ⇈
JaneBurt # 0 ⇈
JaneBurt # 0 ⇈
bormand # 0 ⇈
Ну не всегда нового специалиста можно найти/подготовить за месяц. Хотя зависит от бизнеса, конечно.
[email protected] # 0 ⇈
Угу, а потом он возвращается, подаёт в суд за незаконное увольнение и получет зарплату за всё время, которое не работал. Самое смешное, что если бы его не уволили, платить бы её не пришлось.
В принципе, бизносу, торгующему помидорами на рынке, насрать — наймут кого-то еще и уволят нахуй первого по возвращению, повод найдут. А если бизнос решит бюджет попилить и в закупках поучаствовать, то ему ТК лучше соблюдать — себе же дороже будет.
bormand # 0 ⇈
Лол, это как декрет что ли, место сохраняется?
PolinaAksenova # 0 ⇈
[email protected] # 0 ⇈
И ещё на госслужбе.
В общем, эта хуйня — ещё один повод откосить от армии.
PolinaAksenova # 0 ⇈
[email protected] # 0 ⇈
bormand # 0 ⇈
Атавизм из прошлого, как мне кажется. Тут опять же хватило бы pronoun'а, чтобы знать как к обладателю паспорта обращаться. И куча проблем ушла бы.
[email protected] # 0 ⇈
Нужно же как-то определять, в какие туалеты кого пускать.
booratihno # 0 ⇈
На DjangoCon Europe туалет для всех общий как раз потому, что не всегда понятно кому в какой идти
bormand # 0 ⇈
Ну просто надо делать нормальные туалеты. А не лунки в полу без всяких там перегородок между ними, как у нас в школе были...
booratihno # 0 ⇈
в женских толчках могут стоять автоматы по продаже гигиенических штук, и не факт, что тян приятно их покупать при мужиках
тем не менее, на это стали забивать
bormand # 0 ⇈
Я думаю большинству просто похуй. В конце-концов в супермаркете они всё это при мужиках покупают.
guest # 0 ⇈
bormand # 0 ⇈
JloJle4Ka # 0 ⇈
bormand # 0 ⇈
Ну вот зачем ущемлять права котодевочек?
JloJle4Ka # 0 ⇈
booratihno # 0 ⇈
CHayT # 0 ⇈
Надо ещё разрешить выдавать паспорт девочки-волшебницы, чтобы с ним можно было не работать, и чтобы бесплатные тортики полагались.
[email protected] # 0 ⇈
По куче аниме документальным свидетельствам, девочки волшебницы пашут в конских условиях: ненормированный рабочий день, нет отпусков и выходных, зачастую переработки и ночные смены, условия ТБ на рабочих местах не соблюдена...
CHayT # 0 ⇈
CHayT # 0 ⇈
[email protected] # 0 ⇈
По куче аниме документальным свидетельствам, девочки волшебницы пашут в конских условиях: ненормированный рабочий день, нет отпусков и выходных, зачастую переработки и ночные смены, условия ТБ на рабочих местах не соблюдена...