• Как сделать маршрутизацию URLов в WSGI-приложении на python *без* фреймворков?

    @Tirael78
    Правильное решение - написать парсер, пусть даже самый простой, например с помощью split, разбить строку на параметры, и потом , в зависимости от того бывают ли у вас параметризованные строки или нет, вычленять параметры или просто обработать полученные данные.
    Ответ написан
    2 комментария
  • Целесообразно делать чат-бота на python? Если да то есть ли какие то библиотеки упрощающие это дело(то есть заточенные под это)?

    @Tirael78
    наверно имеет смысл уточнить для какой платформы вам нужен чат-бот, скажем телеграм или фейсбук.
    в зависимости от вашего ответа нужно выбирать ту или иную библиотеку, или просто использовать api от разработчиков.
    От конкретной задачи зависит.
    Ответ написан
    5 комментариев
  • Как в python отследить изменился ли параметр в классе?

    @Tirael78
    Конечно можно. Нужно использовать дискрипторы, в очень облегченном виде что то типа:

    class Notepad:
        def __init__(self):
            self._is_change = False
            self.code = None
    
        def __setattr__(self, key, value):
            if key is 'code' and value is not None:
                self.__dict__['_is_change'] = True
                self.__dict__['code'] = value
            else:
                self.__dict__[key] = value
    
        def save(self):
            print('Тут вот сохранили данные на диск')
            self._is_change = False
    
        @property
        def is_change(self):
            return self._is_change


    note_text = Notepad()
    print('is_change {}'.format(note_text.is_change))
    print('Изменили данные в self.code')
    note_text.code = 'bla bla'
    print('is_change {}'.format(note_text.is_change))
    note_text.save()
    print('is_change {}'.format(note_text.is_change))


    на выходе получим
    is_change False
    Изменили данные в self.code
    is_change True
    Тут вот сохранили данные на диск
    is_change False
    Ответ написан
    1 комментарий
  • Как получить доступ к интерфейсу из другого модуля?

    @Tirael78
    Завершается она как раз таки с ошибкой и очень серьезной - вы совершили рекурсивный вызов и приложение упало достигнув предела рекурсии.

    Если вы хотите получить доступ к объекту из разных модулей, то, либо инициализируйте его в третьем модуле и импортируйте, либо передавайте как ссылку на объект.
    Это так, на вскидку, без понимания почему вам нужно сделать именно так.

    Вообще вам имеет смысл почитать о том как правильно развязывать компоненты в приложении.
    Ответ написан
    3 комментария
  • Как в обработчике запроса ответить клиенту и продолжить выполнение кода?

    @Tirael78
    1 Отвечать клиенту - "все хорошо" до фактического выполнения запроса - в принципе не правильно. А если что то пойдет не так? а вы уже сообщили клиенту что все хорошо.

    2 в отдельный поток или отдельный процесс? правильный ответ зависит от типа выполняемых операций, если у вас там сложные расчеты то поток вам не подойдет, он полезен при операциях ввода -вывода. Учтите, что реализация параллельности в windows и unix будет иметь отличия.

    вообще по сути вопроса, подобные решения правильно делать через менеджер очередей, те вынести синхронные задачи в некий микросервис, тогда вы сможете и обеспечить персистентность задач и отдать правильный ответ пользователю и не беспокоиться что основной поток будет заблокирован.

    Ну и обобщая, я , конечно, не знаю причин выбора данной технологии, но сейчас в python существует готовая реализация асинхронности. Я говорю об asyncio, безусловно это не снимет с вас проблем по блокирующим операциям, но позволит решать вопросы асинхроннсти более элегантным способом.
    Ответ написан
  • Telebot (python): почему разные форматы телефонов (7 и +7)?

    @Tirael78
    вам имеет смысл ознакомиться с стандартом е164 https://ru.wikipedia.org/wiki/E.164
    прочитав его вы поймете что 7 это не правильно, правильно +7, а что касается того что кто то хранит российские номера в виде 7... то лишь потому, что атс автоматически добавляет + при наборе
    Ответ написан
  • Как определить город по координатам?

    @Tirael78
    Даже при использовании внешних систем точно узнать город сложная задача(будут ошибки).
    Если же вы хотите решить вопрос самостоятельно, то единственный выход - самостоятельно описать границы нужных вам городов и решать задачу вхождения точки в многоугольник.

    Вообще, решение задачи точного определения города по точке достаточно сложная, и потребует и внешних ресурсов и самостоятельной их доработки, потому что и границы меняться и условности есть, что то де юро считаться пригородом, а люди считают это частью города.
    Ответ написан
    Комментировать
  • Как можно увидеть все переменные nginx определенного http запроса?

    @Tirael78
    если вы реально хотите получить помощь, то:
    - правильно задайте вопросы, сейчас такое впечатление, что спрашивает Йода.
    - напишите слова правильно, ведь грамматика уже автоматом проверяться, неужели так сложно исправить ошибки?
    Ответ написан
    Комментировать
  • Как перезагрузить python (DJANGO) на сервере и обновить данные на сервере после push??

    @Tirael78
    самому написать можно, если вы либо имеете очень простой сервис, либо обладаете высоким скилом разработки и понимания того, как правильно перезагрузить сервис.

    Но есть и иной путь, запустите свой проект через UWSGI(с Django он интегрируется очень просто), в нем есть опция - reload, те вы можете его настроить так, чтобы при изменение конкретных файлов, ваш сервис правильно рестартанул.
    Подобные механизмы есть и у Gunicorn, если вам он больше нравиться, но я бы рекомендовал с Django использовать именно UWSGI

    https://uwsgi-docs.readthedocs.org/en/latest/
    Ответ написан
    Комментировать
  • Запуск скрипта pythоn3 на хостинге?

    @Tirael78
    разовое выполнение - cron
    если нужно чтобы сервисом работал - supervisord или systemd, второй сложнее, но намного эффективнее
    Ответ написан
  • Работа Jinja2 + Python + html?

    @Tirael78
    можно и без фреймворка
    aiohttp+jinja2
    aiohttp-jinja2.readthedocs.org/en/stable

    все достаточно просто и ни каких лишних сущностей
    Ответ написан
    Комментировать
  • Смысл упаковки ключевых аргументов в python 3?

    @Tirael78
    Это нужно для реализации механизма полиморфизма.
    Частные его случаи приведены выше.
    Ответ написан
    Комментировать
  • Как сделать регистрацию и авторизацию пользователей через мобильный номер?

    @Tirael78
    необходимо:
    1 подключиться к услуге рассылки СМС, наилучшее решение через существующий шлюз, например по России, мы после большого перебора остановились на smsc.ru (это не реклама), у них хороший api, цены в рынке.
    2 Необходимо реализовать взаимодействие с api смс шлюза на своем сервере (в зависимости от выбора api).
    3 На стороне сервера необходимо генерировать код подтверждения, к примеру набор из 4 или 6 цифр или букв, или иной комбинации. Сохранить связку пользователь - код подтверждения, чтобы иметь возможность сравнения в будущем.
    4 используя api шлюза отправляете код подтверждения на номер пользователя.
    5 абонент вводит код подтверждения и отправляет вам на сервер, любым реализованным вами механизмом.
    6 получив под подтверждения, проверяете, что данному пользователю был отправлен именно этот код. Если данные совпали - авторизуете пользователя.

    Некоторые советы по реализации:
    1 установите срок жизни кода, это нужно для безопасности
    2 введите ограничение на количество попыток ввода, опять же для безопасности
    3 при взаимодействии с api шлюза, необходимо анализировать ответы на ваши запросы, скажем человек ввел не существующий номер телефона, ошибся, вам необходимо корректно обработать данную ситуацию, подобных моментом может быть достаточно много.
    4 некоторые шлюзы (как например указанный мной выше) примут российский номер в формате 89 и так далее, но надо понимать что не факт что все шлюзы так поступят, правильный код России 7, и следовательно номер мобильного должен начинаться на 79, в других странах есть свои особенности, и это надо учитывать.
    5 установите срок жизни СМС сообщения (если шлюз позволяет это в своем api) не более срока жизни кода на вашем сервере, к примеру человек вне зоны действия сети, и СМС придет к нему через 1 час, когда уже не будет актуальна, в итоге вы заплатите за бессмысленное СМС сообщение, если у вас много абонентов, в итоге может набежать большая сумма. А так, сообщение просто не будет отправлено и вы сэкономите деньги.

    На самом деле там еше много нюансов, в зависимости от потребности вашего сервиса, но в общих чертах примерно так.
    Ответ написан
    Комментировать