Size: a a a

Django [ru] #STAY HOME

2021 February 12

R

Roomboy in Django [ru] #STAY HOME
Dan Tyan
ну на скрине метод GET not allowed
Странно, только в этом запросе почему-то при нажатии на POST не отправляет Post запрос
источник

DT

Dan Tyan in Django [ru] #STAY HOME
не отправляет ?
источник

R

Roomboy in Django [ru] #STAY HOME
Dan Tyan
не отправляет ?
не, вот как будто просто get, ща через postmen попробую сам
источник

R

Roomboy in Django [ru] #STAY HOME
Через postmen все норм
источник
2021 February 13

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
TLDR: prefetch_related('a_set__b_set') очень тормозит в недрах джанги.

Есть модель Person,
есть Hand  с полем FK на Person,
есть Finger с FK на Hand.

Надо выбрать всех Person, Hand и Finger. Ок, это не сложно.
qs = models.Person.objects.prefetch_realted('hand_set', 'hand_set__finger_set')

Но проблема в том, что второй prefetch очень долгий. Почти две секунды питон проводит в django.db.models.query.prefetch_one_level, при этом на сам запрос - ну типа 30-40ms.

Объектов Person примерно 500-700, Hand и Finger - по паре тысяч каждых. По отдельности`list(models.Hand.all()) и list(models.Finger.all()) быстро выполняются.
Добавление Prefetch объектов не сильно решают проблему.

Кто-нибудь сталкивался с таким?
источник

А

Алексей in Django [ru] #STAY HOME
Pavel Zagrebelin
TLDR: prefetch_related('a_set__b_set') очень тормозит в недрах джанги.

Есть модель Person,
есть Hand  с полем FK на Person,
есть Finger с FK на Hand.

Надо выбрать всех Person, Hand и Finger. Ок, это не сложно.
qs = models.Person.objects.prefetch_realted('hand_set', 'hand_set__finger_set')

Но проблема в том, что второй prefetch очень долгий. Почти две секунды питон проводит в django.db.models.query.prefetch_one_level, при этом на сам запрос - ну типа 30-40ms.

Объектов Person примерно 500-700, Hand и Finger - по паре тысяч каждых. По отдельности`list(models.Hand.all()) и list(models.Finger.all()) быстро выполняются.
Добавление Prefetch объектов не сильно решают проблему.

Кто-нибудь сталкивался с таким?
может, поля дергать только те, что реально необходимы?
источник

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
Алексей
может, поля дергать только те, что реально необходимы?
Это всё потом в drf уедет в трёхуровневую структуру, там нет ненужных полей.
Да и выборка/конструирование объектов быстро проходит.
Очень долго джанга результаты выборки prefetch-запросов прибивает к объектам.
источник

А

Алексей in Django [ru] #STAY HOME
Pavel Zagrebelin
Это всё потом в drf уедет в трёхуровневую структуру, там нет ненужных полей.
Да и выборка/конструирование объектов быстро проходит.
Очень долго джанга результаты выборки prefetch-запросов прибивает к объектам.
а чё, реально нужно отдать без пагинации все 500-700 штук? джанга по умолчанию по 100 запрашивает
источник

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
Алексей
а чё, реально нужно отдать без пагинации все 500-700 штук? джанга по умолчанию по 100 запрашивает
угу, нужно все 500
источник

M

Max in Django [ru] #STAY HOME
Pavel Zagrebelin
угу, нужно все 500
Может попробовать панду подключить?
источник

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
Max
Может попробовать панду подключить?
Панда вроде бы готовый кверисет; мне это не сильно поможет,потому что к этому моменту prefetch_related уже отработал и оттормозил :)
источник

M

Max in Django [ru] #STAY HOME
Pavel Zagrebelin
Панда вроде бы готовый кверисет; мне это не сильно поможет,потому что к этому моменту prefetch_related уже отработал и оттормозил :)
Пандай можно будет достать нужные таблицы и отфильтровать, потом в json преобразуешь, панда очень быстро работает, просто оправдано ли будет ее сюда тащить
источник

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
Max
Пандай можно будет достать нужные таблицы и отфильтровать, потом в json преобразуешь, панда очень быстро работает, просто оправдано ли будет ее сюда тащить
не, ради одной вьюшки - точно не стоит.
источник

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
забавно. руками сымитировал prefetch_related - получилось 100-200 ms на запрос (на графике слева) против 1500-2000 оригинального (справа). прикольно.
источник

AL

Artyom Lazovikov in Django [ru] #STAY HOME
Что значит сымитировал руками? Написал raw запрос?
источник

NS

Nik S in Django [ru] #STAY HOME
госпади, что в JWT означает Bearer? я 2 дня не мог понять как работает ср*ная токен авторизация, пока все сам до миллиметра не прошел, и не всмотрелся, что нужен сран*й Bearer + токен, и заработало
источник

NS

Nik S in Django [ru] #STAY HOME
Откуда бедолаге пользователю узнать что надо Bearer вводить перед токеном
источник

NS

Nik S in Django [ru] #STAY HOME
Его кстатит можно удалить этот "префикс"? я попробовал - и чет не получилось по настройке - авторизация работать перестала
SIMPLE_JWT = {
    'AUTH_HEADER_TYPES': ('Bearer',),
}
источник

N

Nire in Django [ru] #STAY HOME
Nik S
Откуда бедолаге пользователю узнать что надо Bearer вводить перед токеном
С фига ли пользователь должен его сам выводить?
источник

N

Nire in Django [ru] #STAY HOME
Зачем тебе вообще жвт? Почему не аузтокен?
источник