Задать вопрос
  • Как лучше использовать Django + несколько SSH подключений?

    @776166
    Видимо, надо поднимать отдельный сервер (демон), который будет заниматься ssh-соединениями. Django-приложение будет с ним общаться по какому-то API и давать ему команды, чтобы тот выполнял какие-то команды по ssh.

    Вопрос: а нужно ли вообще держать соединения? Если нужно выполнение каких-то разовых команд, то, возможно, имеет смысл использовать что-то типа ansible через celery.
  • Как в aiohttp делать серверный ping?

    @776166 Автор вопроса
    Сергей Горностаев, соединение, видимо, закрывается, но как-то само по себе и этот цикл про это ничего не знает. При корректном закрытии самого сервера лупы ругаются примерно так:
    Task was destroyed but it is pending!
    task: <Task pending coro=<invites_loop() running at ..../ws/handlers/invites.py:27> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x7f9773bdec78>()]>>
    Task was destroyed but it is pending!
    Exception ignored in: <coroutine object invites_loop at 0x7f9773b9a728>
    Traceback (most recent call last):
      File "..../ws/handlers/invites.py", line 27, in invites_loop
      File "/usr/lib/python3.6/asyncio/queues.py", line 169, in get
      File "/usr/lib/python3.6/asyncio/base_events.py", line 580, in call_soon
      File "/usr/lib/python3.6/asyncio/base_events.py", line 366, in _check_closed
    RuntimeError: Event loop is closed


    В самом лупе следующее:
    queue = asyncio.Queue()
        try:
            while True:
                invite, invite_user, creator, appointment_id = await queue.get()

    Ругается на последнюю строчку.
    Я не понимаю, как это работает. Видимо, надо перехватывать какие-то исключения в лупе в том месте, где происходит ошибка, но я хочу перехвата уровнем выше, чтобы всё по-честному закрывалось. Может, надо async for msg in ws: ещё оборачивать ловца исключения? Там же только сообщения из сокета берутся. Такое ощущение, что он из цикла не выходит вообще, потому что ничего после этого цикла не выполняется.
  • Как в aiohttp делать серверный ping?

    @776166 Автор вопроса
    Сергей Горностаев, к сожалению, из тестов не очень понятно, как это перехватывать и вписать в общую логику приложения.

    Вот у меня есть основной обработчик приёма событий из сокета:
    async for msg in ws:
            if msg.type == aiohttp.WSMsgType.close:
                break
            elif msg.type == aiohttp.WSMsgType.error:
                break
            elif msg.type == aiohttp.WSMsgType.text:
                # Тут обработка сообщений
                pass
    #Тут после цикла всё закрывается


    Как мне в него встроить функциональность, которая выходит из цикла и мирно всё закрывает, если сокет порвался по heartbeat?
  • Как в django сделать несколько шаблонов в одной модели?

    @776166
    stilet69, фу так не уметь пользоваться поиском!

    import os.path
    
    class News(models.Model):
        created = models.DateTimeField(auto_now_add=True)
        article = models.CharField(blank=False,
                                   null=False,
                                   default="",
                                   max_length=50,
                                   verbose_name="Артикул",
                                   db_index=True,
                                   unique=True)
    
        def get_template_names(self):
            template_path = "%s/%s" % (path_to_templates, self.article)
    
            if os.path.exists(template_path):
                return template_path
            else:
                return "%s/default.html" % (path_to_templates)


    С точностью до слешей в путях.
  • Как в aiohttp делать серверный ping?

    @776166 Автор вопроса
    Странно. Мне казалось, что там было написано про то, что пинговать клиента надо отдельно. Более того, у меня это установлено. Но или не работает, или я не понимаю, как с этим управляться.
    Тогда вопрос: как отлавливать ситуацию, когда клиент мёртв? Как это вообще должно работать? В доках (мне не нравятся эти доки) я этого не нашел и в примерах этого тоже нет. Все примеры, которые попадались, это вообще игнорируют.
  • Как в aiohttp делать серверный ping?

    @776166 Автор вопроса
    javedimka, бред засчитан.
  • Как в django сделать несколько шаблонов в одной модели?

    @776166
    class News(models.Model):
        created = models.DateTimeField(auto_now_add=True)
        article = models.CharField(blank=False,
                                   null=False,
                                   default="",
                                   max_length=50,
                                   verbose_name="Артикул",
                                   db_index=True,
                                   unique=True)
    
        def get_template_names(self):
            if self.article == 'foo':
                return "templates/foo.html"
            elif self.article == 'bar':
                return "templates/bar.html"
            else: return "templates/default.html"
  • Какую онлаин бухгалтерию используете для Upwork?

    @776166
    Иван, ну как бы то, что они слили меня партнётру — ok, допустим. Но партнёр не получал от меня разрешения на включение в рассылку и уж тем более я не просил его меня где-то регистрировать. И я с Альфой не могу такой договор подписать, который таким образом на третьих лиц распространяется. Наверное. Иначе это был бы полный ад.

    Но в целом, да, Вы правы. Просто меня этот быдло-бизнес подзадоел, а сам я эмоциональный.
  • Какую онлаин бухгалтерию используете для Upwork?

    @776166
    Иван, глупость вы предложили, извините, конечно. Вы предложили принять правила игры этих мошенников и завязать официальную бумажную переписку, что в корне неверно. Потому что следующий шаг — по их внутренним порядкам я должен буду отсосать кому-нибудь из высокого начальства. Дважды. Чтобы они меня отписали от того, на что я не подписывался.
  • Какую онлаин бухгалтерию используете для Upwork?

    @776166
    Иван, Дядя Ваня, ты маненечко таво?
    Это дело принципа. Я ничего не писал и писать не собираюсь, потому что не должен и не обязан. Этим деятелем я написал в электронном письме, как есть: я у вас не регистрировался, никаких заявлений писать не буду, просто удалите этот аккаунт нахер и заодно считайте это письмо письменным отказом от всех рассылок и требованием удалить меня из ваших баз данных контактов. Они удалили, отписали и с тех пор про них ничего не слышно.

    Я думаю, надо завести специальное заявление с превентивным отказом от всех рассылок и запретом на передачу персональных данных третьим лицам. И требовать его подписывать при заключении договоров со всякими конторами. Вплоть до отказа сотрудничать, если не захотят.
  • Django request.build_absolute_uri?

    @776166
    ckatala, мало информации. DRF может этот url как-то по-другому формировать, например брать из ALLOWED_HOSTS.
    localhost всплывает скорее всего потому, что физически он и работает на localhost. Домен появляется во время проксирования. И что-то именно здесь идёт не так.
  • Добавить изображение по API или POST?

    @776166
    Для закачки файла вам его нужно специальным образом передавать на сервер. API само по себе — это просто дополнительная обвязка, которая с этим никак не связана. Гуглите и читайте доки о передачи файлов на сервер для того инструмента, которым пользуетесь. Если инициатором будет HTML (т.е. вы делаете это со страницы), то там ещё форма будет с нюансами.
  • Django request.build_absolute_uri?

    @776166
    У меня такой код конфига nginx без дополнительного шаманства в django (начиная с версии 1.6):
    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    рабочий. Если не поможет, единственное, что ещё с ходу в голову приходит, это посмотреть ALLOWED_HOSTS
  • Как изменять размер на лету?

    @776166
    Если вы будете обращаться к этому изображению через страницы, а не просто напрямую, то вам нужно вот это: https://sorl-thumbnail.readthedocs.io/en/latest/in...
    оно само ресайзит и кеширует

    В противном случае, это вопрос не про django. :)
  • Как запустить сборку python + django?

    @776166
    Давайте последовательно.

    1) Скачать и положить куда-нибудь (recordbook/).
    2) Поставить питон в систему, если его нет. Судя по датам создания проекта, это должна быть версия 2.7.
    3) В проекте прописан MySQL. Вы будете использовать его, если да, то нужно создать БД, как прописано в
    https://github.com/Entropius/recordbook/blob/master/odaybook/settings_dist.py
    или со своими параметрами и изменить settings_dist.py, или прописать туда SQLite.
    4) Запустить recordbook/build/install.py, которая создаст виртуальное окружение (recordbook/.env/), поставит туда все пакеты и сделает миграции.
    5) Теоретически, для базового запуска, всё. Если всё прошло без проблем, то можно попробовать запуститься в режиме devserver.

    6) Активировать виртуальное окружение (точка/пробел/путь к activate):
    . recordbook/.env/bin/activate

    7) Запустить под виртулаьным окружением devserver:
    recordbook/odaybook/manage.py runserver 0.0.0.0:8888

    И смотреть, что будет на 8888 порту сервера через браузер.

    Проект старый, пакеты старые. Могут быть трудности.
  • Как реализовать permissions для отдельных объектов модели?

    @776166
    Как вариант, переопределить менеджер модели на отдельные действия и там чекать привилегии.
    https://docs.djangoproject.com/en/2.2/topics/db/ma...
  • Как решить проблему с Django админкой?

    @776166
    IGrch, в админке генерируется всякое из приложений. Так что он ругается не на админку, а на приложение в рамках админки. Просто это неочевидно.
  • Можно ли использовать несколько шаблонов дизайна в Django?

    @776166
    sim3x, В данном случае KISS — хранить простенький шаблон для формирования текстовых сообщений в базе, а не давать тупому пользователю доступ на файловую систему, где он всё к хренам поломает, или записывать эти шаблоны файлами на диск, что ещё тупее. Не говоря уже о сложности реализации и потенциальных ду[ы]рах. Если будет WYSIWYG, это хорошо, но сам шаблон от этого не должен переезжать на диск, потому что нет в этом вообще никакого смысла.