@pydjango
Django

Полезная информация и правила: https://github.com/amureki/django_faq Вакансии и резюме: @django_jobs Пофлудить идём сюда: @django_flood Статистика чата: combot.org/chat/-1001063854692

1741 members

Архив канала @pydjango 10 февраля 2017 г.

07:19:51 ДП
User 256876359
Блин, ребят никак не могу определится с ресайзем аватарок юзеров, слышал что в моделях переопределить метод save , но я такой нуб что хз как лучше сделать, может кто помочь ?)
07:26:45 ДП
User 261260366
https://github.com/matthewwithanm/django-imagekit
github.com/matthewwithanm/django-imagekit
Automated image processing for Django. Currently v4.0 - matthewwithanm/django-imagekit
07:29:05 ДП
User 110033346
https://github.com/codingjoe/django-stdimage
github.com/codingjoe/django-stdimage
Django Standardized Image Field. Contribute to codingjoe/django-stdimage development by creating an account on GitHub.
07:35:47 ДП
User 256876359
Спасиб, попробую позже
07:35:56 ДП
User 1874846
django_resized
07:38:23 ДП
User 256876359
Ещё, что лучше использовать во вьюхе: классы с generic.views или обычные def -> render...
07:38:47 ДП
User 1874846
классы
07:39:30 ДП
User 1874846
они больше подходят для стиля: "разделяй и властвуй" =)
07:42:39 ДП
User 261260366
мало где пишу классы во вьюхах.
07:50:40 ДП
User 101053005
User 256876359
Ещё, что лучше использовать во вьюхе: классы с generic.views или обычные def -> render...
от многого зависит, если возникают такие вопросы - наверно лучше начать с def -> render
07:53:56 ДП
User 256876359
А в методе с классами, можно в UpdateView использовать две формы
08:00:58 ДП
09:37:12 ДП
User 211270198
https://docs.djangoproject.com/en/1.10/topics/forms/formsets/#passing-custom-parameters-to-formset-forms не могу дойти как передать каждой форме в формсете по параметру
09:50:45 ДП
User 97201888
Всех приветствую. Ребят, подскажите, для реализации выполнения задач с задержкой (например: оповещение каждые два-три часа) какие инструменты можно использовать?
09:51:13 ДП
User 100243492
User 97201888
Всех приветствую. Ребят, подскажите, для реализации выполнения задач с задержкой (например: оповещение каждые два-три часа) какие инструменты можно использовать?
rq, celery, cron
09:51:50 ДП
User 91280178
django-cron
09:52:29 ДП
User 100243492
в своих задач использую rq, довольно прост, и минималистичен
09:52:52 ДП
User 97201888
Celery работает как отдельный модуль? То есть, он не может использовать env проекта?
09:53:03 ДП
User 97201888
Для выборки в базе
09:53:05 ДП
User 97201888
И так далее
09:53:45 ДП
User 97201888
Типа как Channels
09:53:58 ДП
User 107485588
User 97201888
И так далее
sys.path.append
09:54:06 ДП
User 107485588
Или както так
09:55:51 ДП
User 91280178
sys.path.append('/home/project/www/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'projectname.settings'
import django.core.wsgi
09:57:26 ДП
User 97201888
Я вот Celery листаю, вижу, что он отдельно процессом запускается и дать команду на отложенный вызов у него нет (наверное). 
Моя задача выглядит так: после того, как сервер обработал POST запрос, клиенту по сокету каждые полчаса должно приходить уведомление
09:58:07 ДП
User 100243492
User 97201888
Я вот Celery листаю, вижу, что он отдельно процессом запускается и дать команду на отложенный вызов у него нет (наверное). 
Моя задача выглядит так: после того, как сервер обработал POST запрос, клиенту по сокету каждые полчаса должно приходить уведомление
rq на этого хваит за глаза
09:58:21 ДП
User 100243492
и один лишь редис требуется
09:58:40 ДП
User 71389077
ну rq из коробки не умеет в расписание, к нему надо прикрутить хотя бы rq-scheduller
09:59:24 ДП
09:59:44 ДП
User 97201888
time.sleep (o_O)
10:00:06 ДП
User 100243492
можно и через сллип, аможно и шедуллер,
10:00:28 ДП
User 100243492
User 71389077
ну rq из коробки не умеет в расписание, к нему надо прикрутить хотя бы rq-scheduller
я говорю в целом о rq, да и не особых проблем рядом поставить шедулера
10:01:14 ДП
User 107485588
таки целери сильно громоздкое, + за rq
10:01:19 ДП
User 71389077
никаких проблем, я просто уточнил, чтобы человек сразу нашел, что ему надо)
10:01:25 ДП
User 97201888
шедулер вместе запускается?
10:01:34 ДП
User 71389077
отдельным воркером
10:01:44 ДП
User 97201888
А как к нему достучаться?
10:01:53 ДП
User 97201888
event'ы?
10:01:58 ДП
User 100243492
делаешь таску
10:02:08 ДП
User 100243492
и коннект к редису
10:03:22 ДП
10:03:46 ДП
User 97201888
Типа подписку сделать?
10:04:02 ДП
User 100243492
да, некий обсервер
10:04:08 ДП
10:04:17 ДП
User 97201888
А другого чего нибудь нет?
10:04:23 ДП
User 71389077
не, там не подписка
10:04:30 ДП
User 71389077
он же ж работает просто как топор
10:04:42 ДП
User 100243492
и описываешь обсервейбл, на который вешаешь декоратор job
10:05:18 ДП
User 97201888
Мне кажется есть вариант который работает как топор
10:05:52 ДП
User 71389077
считай через тот же механизм, что и сам rq. ты просто помещаешь таску в очередь, а шедуллер раз в N секунд опрашивает среди своих тасков, какие пора выполнить. если такие есть - он их пропихивает в очередь на выполнение, если они при этом периодические - то добавляет к себе обратно
10:06:30 ДП
User 97201888
То есть каким то магическим способом воркер понимает, что у него есть таски?
10:06:45 ДП
User 100243492
никакой магии, он их видит в редисе
10:06:59 ДП
User 100243492
и какие правила выполнения на них
10:07:49 ДП
User 97201888
Ну это ты объясняешь наверное, что внутри происходит?
10:08:28 ДП
User 71389077
https://github.com/ui/rq-scheduler/blob/master/rq_scheduler/scheduler.py#L372
github.com/ui/rq-scheduler/blob/master/rq_scheduler/scheduler.py
rq-scheduler - A light library that adds job scheduling capabilities to RQ (Redis Queue)
10:09:15 ДП
User 97201888
Да, вижу
10:09:31 ДП
User 97201888
Понятно, не успел дочитать аргументы воркера
10:11:31 ДП
User 97201888
О, у него даже dashboard есть
10:11:39 ДП
User 97201888
Спасибо за помощь
10:16:48 ДП
User 71389077
ну да есть, но практика показывает, что его достаточно для разработчика, но недостаточно для пользователей
10:17:11 ДП
User 97201888
Ну это то, что мне нужно
10:17:23 ДП
User 71389077
есть еще huey , если что, примерно то ж самое)
10:19:40 ДП
User 97201888
Я могу его использовать прям в Django процессе?
10:22:08 ДП
User 107485588
зачем?
10:22:42 ДП
User 107485588
а когда какойто гуникорн или увиски сделает тебе 4 джанго процесса?
10:23:36 ДП
User 97201888
Скорее всего я не могу уловить саму суть связки двух процессов
10:24:32 ДП
User 97201888
Что rq, чтоhuey описивают как сделать таск из рядом стоящей функции, но если этой функции вообще рядом нет?
10:25:15 ДП
User 107485588
в контексте rq связь через редис
10:25:15 ДП
User 97201888
Что здесь
10:25:23 ДП
User 97201888
Что тут
10:26:21 ДП
User 97201888
Вешается у huey декоратор. Дальше вызывается print_time(). А далее где логику прописывать на отработку этого таска?
10:27:05 ДП
User 97201888
Есть процесс, который вызывается n-ое количество раз и выполняет один и тот же алгоритм
10:27:13 ДП
User 97201888
Что есть в данном алгоритме?
10:27:37 ДП
User 97201888
Описать вызов они описали на 5+
10:27:59 ДП
User 97201888
А дальше где метод на прослушку отложенного таска
10:28:35 ДП
User 71389077
не понял
10:28:41 ДП
User 71389077
какую прослушку?
10:28:44 ДП
User 97201888
У меня задача такая, что Django должен отдать команду которая скажет - вызови мою функцию через полчаса
10:28:48 ДП
User 71389077
тебе нужно выполнять таск раз в 30 минут?
10:29:05 ДП
10:29:07 ДП
User 71389077
единожды?
10:29:24 ДП
User 97201888
Нет, если клиент увидел то самое уведомление, то надо забыть этот таск
10:29:29 ДП
User 107485588
User 97201888
У меня задача такая, что Django должен отдать команду которая скажет - вызови мою функцию через полчаса
что значит "мою функцию"?
10:29:35 ДП
User 71389077
from datetime import timedelta

# Schedule a job to run 10 minutes, 1 hour and 1 day later
scheduler.enqueue_in(timedelta(minutes=10), count_retweets, tweet_id)
scheduler.enqueue_in(timedelta(hours=1), count_retweets, tweet_id)
scheduler.enqueue_in(timedelta(days=1), count_retweets, tweet_id)
10:30:12 ДП
User 71389077
вот прямо из ридми пример
10:30:17 ДП
User 97201888
Вот второй аргумент меня удивляет
10:30:23 ДП
User 71389077
я не могу понять,что именно тебе не понять
10:30:25 ДП
User 97201888
count_retweets
10:30:31 ДП
User 71389077
это функция
10:31:00 ДП
User 71389077
которую надо выполнить потом
10:31:08 ДП
User 97201888
Верно. Как scheduler в своём процессе поймёт, что есть функция count_retweets?
10:31:16 ДП
User 97201888
Если её не существует в его процессе
10:31:49 ДП
User 97201888
Есть же воркер как отдельный процесс и есть django как отдельный процесс верно?
10:32:54 ДП
User 107485588
а что мешает воркеру заимпортить себе функцию?
10:34:11 ДП
User 97201888
В функции содержится отправка данных по WebSocket через Channels
10:34:52 ДП
10:34:53 ДП
10:34:54 ДП
User 97201888
То есть в процессе воркера я не смогу найти нужный мне канал для передачи
10:35:03 ДП
User 71389077
так там все через picke сериализуется
10:35:10 ДП
User 97201888
Херасе
10:35:12 ДП
10:35:13 ДП
User 97201888
Как это так
10:35:22 ДП
User 71389077
ну так
10:35:25 ДП
User 107485588
не сериализуется вебсокет через пикл...
10:35:32 ДП
10:35:34 ДП
User 97201888
Ну я о том же
10:35:36 ДП
User 71389077
я про scheduler
10:35:40 ДП
User 71389077
пардон)
10:35:50 ДП
User 71389077
не догнал
10:35:50 ДП
User 97201888
То есть видите в чём трабель
10:35:57 ДП
User 97201888
Два разных процесса
10:35:58 ДП
User 107485588
я к тому что обьект вебсокета никак не получится расшарить в другой процесс
10:36:07 ДП
User 97201888
Вот в этом то и проблема
10:36:09 ДП
User 1874846
всем привет, подскажите лучший вариант для написания документации к API
10:36:19 ДП
User 97201888
Я бы заюзал этот воркер для какой нибудь передачи emai
10:36:20 ДП
10:36:20 ДП
User 71389077
swagger/raml
10:36:25 ДП
User 97201888
Но тут всё сложней
10:36:37 ДП
User 71389077
блин я с каналами не работал.
10:36:51 ДП
User 97201888
Blueprint
10:36:54 ДП
User 107485588
User 97201888
Вот в этом то и проблема
у меня был такой кейс с торнадой
10:36:55 ДП
User 97201888
Сергей
10:37:12 ДП
User 107485588
джанга просто пушила в редис
10:37:12 ДП
User 71389077
я отвечал на этот вопрос)
10:37:12 ДП
User 97201888
Ты мне предлагаешь ещё и торнадо развернуть? :D
10:37:12 ДП
User 71389077
Верно. Как scheduler в своём процессе поймёт, что есть функция count_retweets?
10:37:12 ДП
User 71389077
Если её не существует в его процессе
10:37:13 ДП
User 71389077
Есть же воркер как отдельный процесс и есть django как отдельный процесс верно?
10:37:22 ДП
User 107485588
а на торнаде был отдельный тред
10:37:39 ДП
User 107485588
не предлагаю, у тебя же вебсокеты не на торнаде
10:37:45 ДП
User 107485588
просто рассказываю как я его решал
10:37:48 ДП
10:37:59 ДП
User 97201888
У меня был один странный вариант
10:38:05 ДП
User 97201888
Переложить всё на nodejs
10:38:08 ДП
User 107485588
и вот тот тред слушал редис, и решал что делать, а сокет через тред шарится спокойно
10:38:48 ДП
User 97201888
У меня был такой вариант. Отдать ноде таску вызвать определённый url после какого то времени
10:39:40 ДП
User 97201888
Есть ещё варианты гайз?
10:40:28 ДП
User 97201888
Неужели среди 452 человек только @nmerkulov и @parikLS отвечают?)
10:40:58 ДП
User 71389077
ну у меня прост ообеденное время)
10:41:19 ДП
User 107485588
у тебя ченнелс?
10:41:33 ДП
10:42:19 ДП
User 97201888
Я читал, что там есть какой то delay server, думаю подойдёт ли он
10:42:34 ДП
User 97201888
Просто он тоже выполняется как отдельный процесс
10:42:53 ДП
User 97201888
Есть какой то сомнительный example
10:42:56 ДП
10:43:23 ДП
User 97201888
Причём не описывается, могут ли эти два процесса расшариваться друг другу
10:44:07 ДП
User 107485588
хз, я с ченелсом не работал еще, ток с торнадой
10:44:18 ДП
User 107485588
попробуй, вай нот)
10:44:29 ДП
User 110033346
А что вообще лучше для вебсокетов использовать в джанго?
10:44:52 ДП
User 97201888
Зависит от ситуации
10:45:05 ДП
User 110033346
Ситуация банальная - чат
10:45:11 ДП
10:45:18 ДП
User 107485588
щас мне аиохттп импонирует
10:45:36 ДП
User 97201888
В любом случае нода для таких вещей создача
10:45:41 ДП
User 97201888
socket.io
10:45:54 ДП
User 107485588
вебсокеты явные, а не колбеки как в торнаде
10:46:25 ДП
User 97201888
Ну вообще можно и channels разогнать
10:46:27 ДП
User 97201888
Я так понял
10:46:39 ДП
User 71389077
слушай, а можешь еще раз описать, в чем конкретно проблема? учтем, что с каналами я не работал, и только бегло читал доку
10:46:40 ДП
User 97201888
У меня есть чат на Channels
10:46:47 ДП
User 71389077
*перефразировать
10:46:56 ДП
User 110033346
А всякий django-websocket-redis и другие не очень? Конкретно этот привлек относительной простотой деплоя
10:47:00 ДП
10:47:14 ДП
User 97201888
@KaoSpirit community видел?
10:47:23 ДП
User 97201888
django-websocket-redis :D
10:47:28 ДП
User 110033346
Нет, что это?
10:47:34 ДП
User 97201888
Channels официально к джанго прицепилась
10:47:57 ДП
User 110033346
Да, слышал
10:48:57 ДП
User 97201888
@nmerkulov Есть задача. Клиент отправляет запрос до сервера. Сервер должен отдавать по сокету клиенту каждые полчаса уведомление. Ставить worker на отложенную задачу я так понял не вариант с Channels, ибо worker это отдельный процесс, который не сможет увидеть каналы от другого процесса
10:49:10 ДП
User 71389077
почему?
10:49:14 ДП
User 71389077
какой бэкэнд используется?
10:49:31 ДП
User 97201888
Как понять какой бекенд?)
10:49:41 ДП
User 97201888
Точнее вопрос задай)
10:49:41 ДП
User 71389077
ну в настройках)
10:49:47 ДП
10:49:55 ДП
User 71389077
канал же ведь не в одном треде существует, правильно?
10:50:08 ДП
User 71389077
вот пример из доки

@channel_session
def ws_message(message):
    # Stick the message onto the processing queue
    Channel("chat-messages").send({
        "room": message.channel_session['room'],
        "message": message['text'],
    })
10:50:13 ДП
User 97201888
Django Channels это изменённая версия сервера Django
10:50:39 ДП
User 71389077
почему ты не можешь забрать Channel('your_channel_name') из другого процеса?
10:51:04 ДП
User 97201888
А я задаюсь вопросом возможно ли вообще это?)
10:51:33 ДП
User 71389077
http://channels.readthedocs.io/en/stable/backends.html?highlight=layers
10:52:24 ДП
User 71389077
вот опираясь на то, что в настройках есть по inmemory layer и redis layer, я делаю ставку, что при redis layer так ну стопудово можно сделать, иначе совсем грустно
10:52:33 ДП
User 71389077
так то воркер должен запускаться в контексте джанги
10:52:45 ДП
User 71389077
проще всего это сделать собственной management command
10:53:11 ДП
User 71389077
но надо попробовать. тут в общем то один путь быстрый -  эмперический)
10:54:10 ДП
User 107485588
сам сокет не может расшарен в другой процесс
10:54:21 ДП
User 97201888
Вообще я тут подумал, что может
10:54:25 ДП
User 107485588
можно только попробовать передать сообщение обратно в тот процесс в котором открыт сокет
10:54:25 ДП
User 97201888
После слов Никиты
10:54:49 ДП
User 112010716
Господа, я вот читаю про Channels. Я правильно понимаю, что если например 1000 человек одновременно подключится к django через websocket, на котором установлен Channels, то будет запущено 1000 воркеров джанги?
10:55:07 ДП
10:55:21 ДП
User 112010716
А как тогда?
10:55:29 ДП
User 97201888
При продакшене создаётся почти три воркера
10:55:35 ДП
User 97201888
Один из них отвечает на сокеты
10:55:47 ДП
User 97201888
Остальные за http
10:55:49 ДП
User 97201888
и так далее
10:55:51 ДП
User 107485588
вариант расшарить тсп сокет между процессами - через файловый дескриптор
10:55:56 ДП
User 97201888
И я так понял общаются они между собой через layer
10:56:00 ДП
User 112010716
кто держит сокет соединение? Джанга ж блокирующий сервер
10:56:15 ДП
User 97201888
Там Daphne
10:56:30 ДП
User 97201888
Из джанги сделали асинхронку
10:56:48 ДП
User 112010716
Channels does not introduce asyncio, gevent, or any other async code to your Django code; all of your business logic runs synchronously in a worker process or thread.
10:56:54 ДП
User 112010716
это в доке написано по Channels
10:56:59 ДП
User 112010716
нет там асинхронки
10:57:19 ДП
10:57:19 ДП
User 110033346
С виду написано, нет асинхронного кода, а не асинхронки
10:57:48 ДП
User 97201888
Перехватчики
10:58:03 ДП
User 97201888
Может быть я не правильно выразился =/
10:58:23 ДП
User 97201888
Я так понял, что он превращает любой http запрос в канал
10:58:34 ДП
User 112010716
run synchronously так вроде и понимается, что работает не в асинхронном режиме, нет?)
10:58:45 ДП
User 71389077
ну это смотря что понимать под асинхронкой
10:59:01 ДП
User 112010716
User 97201888
Я так понял, что он превращает любой http запрос в канал
Ну так сокет - это ж постоянное соединение и его кто-то должен постоянно обслуживать
10:59:06 ДП
User 112010716
то есть какой-то воркер
10:59:39 ДП
User 112010716
один воркер на 1000 соединение - такое не работает)
10:59:39 ДП
User 97201888
При продакшене создаётся почти три воркера
10:59:40 ДП
User 97201888
Один из них отвечает на сокеты
10:59:40 ДП
User 97201888
Остальные за http
10:59:41 ДП
User 97201888
и так далее
10:59:53 ДП
User 97201888
А как работает торнадо?
11:00:08 ДП
User 107485588
там ивент луп
11:00:13 ДП
User 107485588
и корутины
11:01:14 ДП
User 97201888
Channels работает под Twisted, может это как то картину разъяснит?)
11:01:51 ДП
User 107485588
у твистед насколько я знаю та же модель
11:01:59 ДП
User 97201888
Глядя на исходники я увидел, что весь http сервер перекопали
11:06:16 ДП
User 211270198
https://docs.djangoproject.com/en/1.10/topics/forms/formsets/#passing-custom-parameters-to-formset-forms не могу дойти как передать каждой форме в формсете по параметру
11:12:35 ДП
User 97201888
Не знаю как, но Channels delay сработал отлично
11:13:22 ДП
User 97201888
Без костылей и простым интерфейсом
11:13:41 ДП
User 107485588
Ну так в 1 процессе же)
11:13:50 ДП
User 97201888
Как раз таки нет
11:14:12 ДП
User 97201888
Чтобы можно было отложенно вызвать, запускается manage.py rundelay
11:14:13 ДП
User 97201888
воркер
11:14:20 ДП
User 97201888
Который слушает каналы
11:14:38 ДП
User 97201888
Да, и он подключается к редису
11:14:56 ДП
User 107485588
Ну как нет, сокет же открыт в том же процессе что и ченнелс
11:15:09 ДП
User 97201888
Процессы разные
11:15:19 ДП
User 97201888
Channel layer один и тот же
11:15:38 ДП
User 107485588
Ты передаешь сообщение через редис, а не сокет
11:15:58 ДП
User 97201888
Я понял как это работает
11:16:11 ДП
User 97201888
Им вообще похер на сокеты, существуют они или нет)
11:16:18 ДП
User 97201888
У них есть просто идентификаторы на каналах
11:17:13 ДП
User 97201888
Процессы просто вызывают эти самые идентификатры
11:18:12 ДП
User 97201888
Из любого процесса вызываешь канал под названием my_channel например. И если процесс найдётся который обслуживает это название канала - сработает
11:18:34 ДП
User 97201888
Короче говоря event emitter
11:19:52 ДП
User 97201888
Смотря на код видишь некую магию
11:20:06 ДП
User 97201888
Что твой код вызывается в твоём же процессе без каких либо косяков
11:20:46 ДП
User 97201888
Кстати кто нибудь уже опробывал asyncio?
11:20:51 ДП
User 71389077
воооооооооооот как то так я и подозревал
11:20:54 ДП
User 71389077
опробывал)
11:20:59 ДП
11:21:03 ДП
User 97201888
И как
11:21:12 ДП
User 71389077
нормос
11:21:15 ДП
User 97201888
Стоит изучать?
11:21:21 ДП
User 71389077
ну мы его еще на 3.4 юзали
11:21:25 ДП
User 97201888
Ты для каких целей его используешь?
11:21:38 ДП
User 97201888
Ну на 3.6 он интересней же
11:21:41 ДП
11:21:56 ДП
User 71389077
но когда мы его юзали, 3.5 только только вышел)
11:22:01 ДП
User 107485588
у меня как раз аиохттп вебсокеты обслуживает на одном из проектов
11:22:13 ДП
User 71389077
ну он вообще очень похож на торнадо
11:22:37 ДП
User 71389077
мы на нем личный кабинет сделали
11:22:58 ДП
User 71389077
планировалась и витрина, но ее в итоге статикой раздавали из кэша
11:23:07 ДП
User 71389077
а лк перенесли в джангу))
11:23:10 ДП
User 71389077
но опыт был интересный
11:23:40 ДП
User 71389077
основная боль в том, что алхимия не умеет в асинхронность и приходилось из нее фактически юзать только билдер
11:24:13 ДП
User 71389077
стоит ли изучать? конечно стоит, по крайней мере для расширения кругозора

а для раныка пока не ясно...
11:24:15 ДП
User 71389077
*рынка
11:24:29 ДП
User 97201888
стоп, Алхимия?
11:24:37 ДП
User 97201888
Можешь упомянуть?
11:25:03 ДП
User 71389077
что упомянуть?
11:25:22 ДП
User 107485588
вот собственно екзампл для алхимии с аиохттп
11:25:23 ДП
User 107485588
https://github.com/KeepSafe/aiohttp/blob/master/demos/polls/aiohttpdemo_polls/db.py
github.com/KeepSafe/aiohttp/blob/master/demos/polls/aiohttpdemo_polls/db.py
aiohttp - http client/server for asyncio (PEP-3156)
11:25:27 ДП
User 71389077
sqlalchemy по крайней мере на тот момент не умела
11:25:43 ДП
User 97201888
А, вы имеете в виду sqlalchemy =/
11:25:47 ДП
User 71389077
воот да
11:27:20 ДП
User 107485588
на самом деле ничего напряжного, если база не большая
11:27:22 ДП
User 158695346
User 107485588
https://github.com/KeepSafe/aiohttp/blob/master/demos/polls/aiohttpdemo_polls/db.py
github.com/KeepSafe/aiohttp/blob/master/demos/polls/aiohttpdemo_polls/db.py
aiohttp - http client/server for asyncio (PEP-3156)
msg = "Question with id: {} or choice id: {} does not exists"
raise RecordNotFound(msg.format(question_id), choice_id)
IndexError будет на формате
11:49:22 ДП
User 161072761
господа, приветствую! Для местоположения шаблонов что считается best practice: в общей папке templates или отдельно для каждого приложения?
11:51:18 ДП
User 107485588
мое имхо - в общей чтото что может шарится между апликейшенами, бейс какойто
11:51:35 ДП
User 107485588
а остальные в своих аппах
12:01:23 ПП
User 158695346
User 161072761
господа, приветствую! Для местоположения шаблонов что считается best practice: в общей папке templates или отдельно для каждого приложения?
второой вариант позволяет легко переносить приложения между серверами. первый вариант - лего обновлять дизайн, просто подменять папку tempaltes
12:07:07 ПП
User 161072761
Спасибо за ответы. В целом понятно.
12:12:32 ПП
User 97201888
Пишите SPA :D
12:12:52 ПП
User 97201888
Не надо использовать django templates
12:40:10 ПП
User 39597995
Мб тут кто-нибудь подскажет :)
12:40:11 ПП
User 39597995
Всем привет. Подскажите кто с sorl(Django, Haystack) работал -
если добавил поле в модель и хочу чтобы solr его, как уже и другие поля модели, начал индексировать

то можно просто перегенерировать schema.xml и сделать updex_index
или же надо делать сразу rebuild_index ?
12:45:30 ПП
User 220504594
Помоему updex_index будет достаточно
12:48:11 ПП
User 29286513
Привет , нужно сделать fail safe server, например два одинаковых сервера, если один упал то работает другой. Как это называется? Или может ссылку где объясняется?
12:50:29 ПП
User 39597995
User 220504594
Помоему updex_index будет достаточно
ок, спасибо :)
12:53:45 ПП
User 129764355
User 29286513
Привет , нужно сделать fail safe server, например два одинаковых сервера, если один упал то работает другой. Как это называется? Или может ссылку где объясняется?
Можно примитивно в nginx настроить upstream на несколько серверов, где крутится приложение, там же руками проставить "силу" этих серверов - кто больше, кто меньше сможет обработать.

А вообще искать про горизонтальное масштабирование приложений
12:55:02 ПП
User 29286513
User 129764355
Можно примитивно в nginx настроить upstream на несколько серверов, где крутится приложение, там же руками проставить "силу" этих серверов - кто больше, кто меньше сможет обработать.

А вообще искать про горизонтальное масштабирование приложений
А это обязательно должен быть физически один сервер, или можно на разных тоже
12:55:30 ПП
User 129764355
Совсем не обязательно
12:55:31 ПП
User 129764355
http://nginx.org/ru/docs/http/ngx_http_upstream_module.html
12:56:15 ПП
User 129764355
Но это как примитивный вариант
12:56:38 ПП
User 129764355
Есть много более навороченных вариантов в зависимости от хотелок
12:56:44 ПП
User 29286513
Тогда как синхронизируются базы данных
12:57:37 ПП
User 129764355
А это другой вопрос:
1) Базе хорошо бы тоже быть реплицированной
2) Все хосты с приложением смотрят на одну базу
12:58:11 ПП
User 129764355
Т.е. для базы нужно отдельный хост или контейнер выделить.
12:58:59 ПП
User 29286513
То есть грубо говоря три сервера
12:59:07 ПП
User 29286513
Один содержит в себе базу данных
12:59:15 ПП
User 29286513
А два остальных рабочие
12:59:48 ПП
User 129764355
Грубо - да. И на один из рабочих поднят nginx, в котором настроен upstream на себя и соседний сервер.
12:59:54 ПП
User 120578100
для начала советую ознакомиться с балансировщиками нагрузки
12:59:59 ПП
User 120578100
https://xakep.ru/2014/03/15/62207/
xakep.ru/2014/03/15/62207
Когда мощности сервера уже не хватает, встает вопрос, каким путем идти дальше. Апгрейд часто не дает пропорционального прироста и к тому же не обеспечивает требуемой отказоустойчивости. Поэтому самым верным шагом будет установка второго сервера, который возьмет на себя часть нагрузки. Остается выбрать приложение, которое будет обеспечивать балансировку.
01:01:16 ПП
User 120578100
Что касается распределённой БД, то копать в сторону какой нить перконы, у postgres  есть встроенный механизм master/slave
01:01:44 ПП
User 120578100
Но не думаю, что этим должен заниматься разработчик приложения
01:02:35 ПП
User 120578100
Таких клиентов чаще всего посылают сразу
01:03:35 ПП
User 120578100
Иметь знания неплохо, но человек-оркестр... увольте
01:03:37 ПП
User 29286513
User 120578100
Но не думаю, что этим должен заниматься разработчик приложения
Логично, для меня важно знать просто теорию
01:04:37 ПП
User 29286513
Насколько я понимаю это принципиально не влияет на архитектуру самого приложения
01:04:51 ПП
User 120578100
Теория простая... есть некий балансировщик... который получает запросы от конечных пользователей и перенаправляет их на конкретные сервера...
01:05:07 ПП
User 120578100
User 29286513
Насколько я понимаю это принципиально не влияет на архитектуру самого приложения
нет, конечно
01:05:46 ПП
User 120578100
по сути у тебя несколько копий твоего проекта запущенных на разных машинах
01:06:31 ПП
User 120578100
балансировщик, типа регулировщика на перекрёстке без светофора
01:06:35 ПП
User 29286513
Ок теперь прояснилось.
01:06:48 ПП
User 120578100
Что же касается бд... то тут не так просто
01:07:09 ПП
User 29286513
То есть клиент сможет при росте нагрузки реализовать это
01:07:14 ПП
User 120578100
есть вариант настройки на уровне приложения, либо на уровне сервера бд
01:07:20 ПП
User 29286513
И распределить нагрузку между серверами
01:07:25 ПП
User 120578100
User 29286513
То есть клиент сможет при росте нагрузки реализовать это
конечно
01:07:37 ПП
User 29286513
Спасибо
01:07:49 ПП
01:08:12 ПП
User 120578100
живой пример... livemaster.ru
01:08:53 ПП
User 120578100
на момент 2012 года было 5 бекэнд серверов, 3 сервера бд и 3 контент сервера
01:09:32 ПП
User 29286513
Круто,
01:10:12 ПП
User 120578100
Сейчас не в курсе обстановки, так как уволился оттуда)))
01:33:56 ПП
User 237205147
Ребят, подскажите, пожалуйста, как получить разность значений, полученных из БД.
01:36:54 ПП
User 240629525
вычесть?)
01:38:30 ПП
User 237205147
Именно вычесть полученные из выборки значения
01:39:10 ПП
User 237205147
Пробовал, пишет ошибку
01:39:19 ПП
User 107485588
какую
01:48:55 ПП
User 240629525
нужны телепаты в чат)
01:49:23 ПП
User 120578100
Сорян, свой хрустальный шар отдал в ремонт
01:49:42 ПП
User 237205147
AttributeError 'function' object has no attribute 'order_by'
01:50:02 ПП
User 120578100
неверная конструкция
01:50:19 ПП
User 240629525
ты строчку эту ссюда скопировал бы, или думаешь телепаты есть
01:50:26 ПП
User 240629525
саму конструкцию
01:50:27 ПП
User 120578100
забыл где то
()
01:51:42 ПП
User 237205147
Мне надо получить из базы значения, а затем вычесть их
01:52:01 ПП
User 120578100
как ты получаешь?
01:52:01 ПП
01:52:05 ПП
User 1874846
User 237205147
AttributeError 'function' object has no attribute 'order_by'
тебе дебагер показывает на какой строчке ошибка, копирни её сюда, ну ёпта
01:52:22 ПП
User 158695346
User 237205147
Мне надо получить из базы значения, а затем вычесть их
где-то в коде, перед .order_by( нужно поставить скобки: ().order_by(
01:52:38 ПП
User 109322233
User 29286513
А это обязательно должен быть физически один сервер, или можно на разных тоже
не обязательно, но бесмысленно
01:53:32 ПП
User 120578100
User 158695346
где-то в коде, перед .order_by( нужно поставить скобки: ().order_by(
Ну я это ему и написал)))
01:54:23 ПП
User 120578100
Однако не думаю, что верная конструкция у него изначально
01:56:23 ПП
User 211270198
Подскажите:
Есть formset, заполняю его списком initial из 20 элементов. 
formset получается почему-то длиной 21 элемент
Передаю в шаблон, но возвращается мне данные 21 формы и в хтмле - form-TOTAL_FORMS = 21
01:57:53 ПП
User 211270198
formset = self.MyFormSet(initial=init_data)
print(len(init_data), len(formset))
20 21
01:58:17 ПП
User 211270198
MyFormSet = forms.formset_factory(form=MyForm)
01:58:24 ПП
User 237205147
views.py:     truants = Record.objects.filter.order_by('count_list')-Record.objects.filter.order_by('count_fact')
01:58:27 ПП
User 211270198
Форма из четырех обычных полей
01:58:40 ПП
User 158695346
User 211270198
MyFormSet = forms.formset_factory(form=MyForm)
форма для нового элемента?
01:59:40 ПП
User 211270198
а как её убрать?
01:59:56 ПП
User 158695346
или посчиталась management форм от формсета?
01:59:59 ПП
User 211270198
нашел
02:00:12 ПП
User 211270198
extra=1 по умолчанию в fromset_factory
02:00:26 ПП
User 211270198
вы чудо :)
02:02:41 ПП
User 240629525
User 237205147
views.py:     truants = Record.objects.filter.order_by('count_list')-Record.objects.filter.order_by('count_fact')
from django.db.models import F
Record.objects.annotate(new_value=F('count_list') - F('count_fact')).order_by('new_value')
02:02:51 ПП
User 240629525
как-то так
02:04:36 ПП
User 237205147
исправляю, пробую
02:07:10 ПП
User 194990550
Ребят обновлять Django с 1.6 на более новое реально и на сколько это может затянуться?
02:08:31 ПП
User 39597995
с 1.7 на 1.8 не очень много исправлений потребовалось
Тут скорее нужно скурпулезно к библиотекам отнестись. Многие 1.6 уже не поддерживают
02:08:46 ПП
User 240629525
Основное что надо будет сделать это все миграции, с 1.7 они в дисриибутиве
02:09:00 ПП
User 194990550
Просто там еще south для Джанго испольщуется
02:09:02 ПП
User 240629525
остальное ерунда
02:10:39 ПП
User 240629525
вообще если проект не большой и не все так критично, ты просто выкидываешь south и генерируешь новые миграции для всех приложений, и хорошо бы при этом чтобы на стороне СУБД уже все им соответствовало, чтобы не было конфликтов при изменениии структур данных
02:12:07 ПП
User 158695346
А бывает вообще необходимость хранить миграции, или после обновления на продакшене можно squasmigration делать и горя не знать?
02:13:19 ПП
User 240629525
Ну ведь намного проще делать на сервере 
git pull
manage.py migrate
чем в базу лазить
02:15:46 ПП
User 158695346
User 240629525
Ну ведь намного проще делать на сервере 
git pull
manage.py migrate
чем в базу лазить
ну. а после migrate - squashmigration
02:17:51 ПП
User 240629525
можно, хотя я предпочитаю хранить все, видны изменения
02:18:01 ПП
User 240629525
без squash
02:20:46 ПП
User 97201888
Что значит squashmigration?
02:23:02 ПП
02:23:04 ПП
02:23:06 ПП
User 97201888
Вспомнил
02:23:21 ПП
User 158695346
User 97201888
Что значит squashmigration?
команда, склеивающая несколько миграций в одну. Если например в одной миграции у тебя было CreateModel, а в следующей DeleteModel, то они уберутся
02:23:30 ПП
User 240629525
объединяет миграции
02:23:37 ПП
User 97201888
Да, вспомнил
02:23:41 ПП
User 240629525
в один файл
02:25:05 ПП
User 97201888
Есть вопрос один. Есть ли бесшовный деплой приложений?
02:25:20 ПП
User 97201888
На нескольких серверах сразу
02:25:37 ПП
02:28:18 ПП
User 97201888
То есть он даёт возможность бесшовно деплоить?
02:29:29 ПП
User 97201888
Интересно правильно ли я вопрос задал
02:31:52 ПП
User 97201888
Мне интересна стратегия
02:47:19 ПП
User 120996334
Если ты имеешь ввиду деплоить на несколько серверов так, будто это один, то фабрик тебе подойдёт. Хотя если хочешь совсем в деплой удариться то изучить ансибл
02:48:16 ПП
User 240629525
Я так понял что ему нужно чтобы сервер при деплои не перезагружался, т.е. не было простоев
02:49:05 ПП
User 97201888
@rown30 В точку. Мне нужно понять стратегию и какие инструменты используются
02:49:29 ПП
User 120996334
Ред-блек деплоймент это
02:49:33 ПП
User 240629525
если есть балансер, то можно по очереди рестартить и нет проблем, если сервер один даже не представляю
02:49:34 ПП
User 120996334
Или Blue green
02:49:42 ПП
User 120996334
Как их только не называют
02:49:50 ПП
02:51:36 ПП
User 120996334
Суть в том что тебе нужен load balancer
02:52:07 ПП
User 120996334
У тебя например к нему подключён один веб сервар.
02:52:44 ПП
User 240629525
С балансером там все понятно, он перенаправляет на тот сервер который доступен сейчас
02:53:03 ПП
02:53:07 ПП
User 97201888
У меня был такой вариант
02:53:10 ПП
User 120996334
Понимаешь ещё один, новую версию
02:53:10 ПП
User 120996334
Он запустился, и переклбчаешь балансер на него,  а старый киляешь. Профит
02:53:20 ПП
User 97201888
Что есть 4 сервера например, и по очереди
02:53:24 ПП
User 97201888
Перезапуск
02:53:44 ПП
User 240629525
Другое дело что далеко не все сервисы имеют балансер и далеко не всем он нужен
02:53:47 ПП
User 120996334
В кубернетсах такое например из коробки почти есть
02:53:52 ПП
User 240629525
Да и ресурсы на все это
02:54:38 ПП
User 120996334
Чувак, если тебе не нужен балансер и ресурсов нет то и бесшовный деплой для такого проекта оверкилл
03:01:36 ПП
User 120996334
На будущее это не бесшовный деплой а zero maintenance deployment
03:49:24 ПП
User 150318461
Всем привет!!!
03:52:29 ПП
User 107485588
хелоу
05:07:26 ПП
User 1874846
всем привет, подскажите..
разворачиваю готовый проект для дальнейшей работы..
структура:
core/
├── models.py
├── settings.py
в models.py есть строка:
import settings
говорит, что settings найти не может..
развернул на django 1.10.5, в чем может быть трабла?
по сути проект на серваке развернут, может в версии django какая-то проблема?
05:11:13 ПП
User 107485588
покажи PYTHONPATH
05:14:59 ПП
User 194990550
From Django.conf import settings
05:15:23 ПП
User 194990550
А нет, тут другое
05:15:35 ПП
User 194990550
Ну попробуй полностью путь прописпть
05:16:24 ПП
User 199234867
А если и апликейшн указать?
05:16:56 ПП
User 1874846
['', '/home/enth/PROJECTS/my_project/ENV/lib/python35.zip', '/home/enth/PROJECTS/my_project/ENV/lib/python3.5', '/home/enth/PROJECTS/my_project/ENV/lib/python3.5/plat-x86_64-linux-gnu', '/home/enth/PROJECTS/my_project/ENV/lib/python3.5/lib-dynload', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/home/enth/PROJECTS/my_project/ENV/lib/python3.5/site-packages']
05:17:24 ПП
User 107485588
не вижу core....
05:17:30 ПП
User 1874846
пути это классный вариант) только он почему-то у заказчика работает в таком виде) на сколько я понял)
05:17:45 ПП
User 107485588
в каком виде
05:18:08 ПП
User 107485588
почитай про порядок поиска модулей
05:18:14 ПП
User 194990550
Ну через try expect сделай
05:18:21 ПП
User 240629525
from .settings import *
05:18:49 ПП
User 1874846
User 240629525
from .settings import *
так видит)
05:18:59 ПП
User 1874846
почему первый вариант ему не понравился..
05:18:59 ПП
User 240629525
если это не стандартный джанго сеттинг, если тандартный то from django.conf
05:19:19 ПП
User 240629525
ну вот так
05:20:48 ПП
User 107485588
User 1874846
почему первый вариант ему не понравился..
потому что https://docs.python.org/2/tutorial/modules.html#the-module-search-path
05:22:25 ПП
User 240629525
если просто,то from .settings import * - эта хрень говорит ищи в том же модуле settings
05:22:54 ПП
User 240629525
остальное как уже сказали читай порядок импорта
05:24:01 ПП
User 194990550
Люблю импорта в пайтоне:)
05:56:42 ПП
User 194990550
Стоит ли на Jinja переходить, и как там с кастомными тегами?
Для простых проектов оверхэд или нет?
05:57:16 ПП
User 256876359
Спасиб ребятам выше, за  то что помогли с работой с изображениям (в частности за imagekit). Все работает !
06:03:03 ПП
User 240629525
Якобы Jinja быстрее работает, для простых проектов вообще нет смысла
06:03:10 ПП
User 18500084
User 194990550
Стоит ли на Jinja переходить, и как там с кастомными тегами?
Для простых проектов оверхэд или нет?
Да
06:04:04 ПП
User 18500084
Пока не начнёшь думать о том, почему эта страница медленно рендерится, даже при том, что запросы в бд быстрые, можешь не думать о движке
06:05:07 ПП
User 240629525
Кешируй куски шаблонов и работать будет быстрее чем ninja
06:06:24 ПП
User 240629525
Вся проблема ниньзя в том, что нет некоторых стандартных тегов, и приходится писать эти костыли
06:34:21 ПП
User 18500084
User 240629525
Вся проблема ниньзя в том, что нет некоторых стандартных тегов, и приходится писать эти костыли
Когда упираешься в производительность - возьмешь, да перепишешь недостающие куски. Другое дело, что упрешься ты в очень редких случаях
06:35:38 ПП
User 240629525
Когда упираешься в производительность, то включаешь кеширование. А для эстетов есть flask, вот там и низя пригодится
07:12:54 ПП
User 107485588
User 240629525
Вся проблема ниньзя в том, что нет некоторых стандартных тегов, и приходится писать эти костыли
Каких?
07:16:52 ПП
User 240629525
Я не помню по памяти, помню нет некоторых фильтров для отображения текста, которые я использовал для некоторых приложений
08:17:24 ПП
User 194990550
у вас тоже на гитхабе стал хедер темным о.о?
08:17:45 ПП
08:17:45 ПП
User 205982802
нет, толкьо для тебя поменяли))
08:17:51 ПП
User 18500084
https://twitter.com/mdo/status/830138373230653440
twitter.com/mdo/status/830138373230653440
Dark header has arrived on https://t.co/eRIXyoa8Qa for desktop and mobile! First of many iterative design changes coming. 😉
08:18:13 ПП
User 97201888
Они планируют dark тему полностью ставить?
08:18:34 ПП
User 97201888
А выглядело бы ничё так
08:19:18 ПП
User 18500084
User 97201888
А выглядело бы ничё так
https://github.com/StylishThemes/GitHub-Dark
github.com/StylishThemes/GitHub-Dark
:octocat: Dark GitHub style. Contribute to StylishThemes/GitHub-Dark development by creating an account on GitHub.
08:20:25 ПП
User 97201888
Думаешь я не в курсе?))
08:20:34 ПП
User 97201888
Я имею в виду нативно
08:20:37 ПП
User 18500084
думаю, вполне можешь быть не в курсе
08:20:43 ПП
User 18500084
откуда ж мне знать о тебе
08:21:26 ПП
User 97201888
Я считаю, что это не проблема найти изменённые стили любого сайта) Так что
08:21:30 ПП
User 97201888
это не новость