• Как указать кодировку при возвращении ответа с сайта?

    @Zanak
    А кодировку своих исходников указываете? Лучше скрипты держать в кодировке utf8, которая является "родной", для 3 ветки питона.
    В заголовок ответа сервера с погодой можно попробовать посмотреть, какую кодировку он указывает, и попробовать перекодировать (но сначала попробуйте просто указать кодировку своих скриптов, иногда хватает этого)?
    Ответ написан
    3 комментария
  • Есть ли какойто подход к программированию называемый Api First?

    @Zanak
    Такое возможно, если речь о сервисах. Пишете спеку для swagger-а, с помощью их тула генерируете болванку сервиса, допиливаете реализацию в ручную (я не помню, генератор заполняет обработчики кодом, или оставляет их пустыми). Правда это работает только при создании сервиса с нуля, поддерживать существующий код вам все равно придется руками :)
    Для приложений первичны, скорее всего, данные, с которыми вы работаете, чем методы их использования. Поэтому, для приложений, такой подход к разработке лучше не использовать, как мне кажется.
    Ответ написан
    Комментировать
  • Почему из-за Popen.wait() подпроцесс работает некоректно?

    @Zanak
    1. У вас компилится windows-gui приложение. Попробуйте явно посмотреть в сторону -m параметра для g++ и добавить правильное значение в ваш cmd сценарий. Форточек под рукой нет, подробнее сказать не могу.
    2. Эта функция вроде как запускает вашу команду с указанными параметрами и ждет завершения, разве нет? (Это по поводу ожидания завершения)
    Ответ написан
    Комментировать
  • Как сделать имена переменных (полей) более читаемыми?

    @Zanak
    Если вопрос еще актуален: не делайте то, что вы описывали в водной части вопроса. Включение отношений объектов в их именование - это есть плохая идея, потому что рефакторинг иерархии классов может привести, при таком подходе к именованию, к изменению имен и содержимого методов, напрямую этим рефакторингом незатронутых. Это особо актуально в случае скриптовых языков, где модули могут подгружаться в процессе исполнения, и импорт библиотеки происходит ни при каждом запуске приложения. Хорошо если вы тщательно покрываете свой код тестами, но даже они могут не спасти.
    Для именования таблиц лучше использовать имена существительные английского языка в единственном числе. Для удобства, можно соединять несколько слов с помощью символа '_'. Например: user, user_profile, user_acl, для хранения учетки пользователя, его профиля и прав соответственно. Если вы расширяете чужой проект, допустимо использовать префикс, чтобы визуально контролировать, какие таблицы добавили вы, а какие существовали изначально: например - my_user_additional_info. Такой подход в достаточной мере самодокументирует ваш проект и упрощает вашим возможным коллегам его поддержку.
    С именованием классов и переменных подход похожий. camelCase или snake_case, или даже PascalCase, это дело вкуса, по большому счету. Да, у многих, если не всех, языков есть свой стиль форматирования кода, но следовать ему или нет, это ваш выбор. Я ограничусь советом: придерживайтесь выбранного стиля оформления текста, хотя бы до конца проекта.
    Ответ написан
    1 комментарий
  • Как использовать переменную из функции другого файла?

    @Zanak
    > global var
    Это значит, что вы хотите использовать глобальную переменную, но это не объявление переменной как таковой. Вне функции bar вам надо объявить эту переменную, тогда в функции вы сможете ее инициализировать.
    Ответ написан
    Комментировать
  • Почему FLASK render_template может искажать форматирование передаваемого в качестве параметра HTML-файла?

    @Zanak
    Лучше бы увидеть вашу вьюху, потому что странно, в том виде, как вы описываете, проблем быть не должно.
    Вот чего гугл предложил на запрос "python flask render_template plain html": раз, два, три, ну и четыре.
    Ответ написан
    Комментировать
  • Какой фреймворк для создания клиент-серверного приложения выбрать?

    @Zanak
    А при чем здесь rest?
    1. у вас сервис, запущенный на рабочей станции, должен лить картинки на сервер. если вам обязательно хочется использовать http, используйте http.client, как вариант.
    2. как вариант, можно запилить свой клиент/сервер для доставки скриншотов в админку. можно обойтись и штатными модулями.
    3. а вот смотрелку, того что вам станции насыпали, можно запилить на чем угодно, например на django.
    Ответ написан
    Комментировать
  • Почему Flask часто падает на сервере разработки, production но не выводит ошибок traceback?

    @Zanak
    Первейший совет: воспользуйтесь поиском, в данном случае может помочь поиск по "flask debug on", или подобным критериям.
    Обычно включение отладки и изучение логов помогает.
    Можно попробовать посоветовать мониторить использование памяти. Не уверен на сто процентов, но в одном из проектов у меня процесс по тихому сыпался, когда утыкался в память, и оптимизация по этому поводу помогла решить проблему.
    Если сервер сидит за apache/nginx, загляните в их логи, иногда бывает полезно.
    Более содержательных идей вряд ли смогу предложить, не видя код.
    Ответ написан
  • Зачем в классе-наследнике вызывать инициализацию класса-родителя в Python?

    @Zanak
    Во первых, разве вызов super не должен выглядеть так:
    super(Example, self).__init__()?
    Когда мы переопределяем метод в потомке класса, то мы можем заново реализовать всю работу этого метода, и тогда вызов super не нужен вовсе.
    Если мы хотим только немного изменить поведение метода, то нам остается в подходящем месте встроить вызов метода родителя, сообщив среде исполнения родителя какого типа мы ищем (в вашем случае Example) и ссылку на текущий экземпляр (это self).
    Теперь собственно ответ на ваш вопрос: инициализация класса родителя может быть сложным процессом, потому что свойства предка сами могут быть объектами, которые важно правильно построить и инициализировать, и если вы не готовы делать это сами, в каждом случае, когда создаете нового наследника, то вы можете вызвать super.
    Только вызывайте его правильно. :)
    Ответ написан
    1 комментарий
  • Как обновить статику/очистить кэш в браузере на python-flask?

    @Zanak
    Поиск ваш друг. Можно заставить страницы устареть например так. Хинт для пыха, но адаптируется на раз.
    Ответ написан
    Комментировать
  • Что означает за странное (namespace)?

    @Zanak
    Подозреваю, что здесь, в пункте 6.4.1 и таится ответ на ваш вопрос.
    Ответ написан
    4 комментария
  • Flask 400 error?

    @Zanak
    jsonify не спасет отца русской демократии? :)
    Ответ написан
    Комментировать
  • Вывод данных в Flask?

    @Zanak
    1. Не очень понял, зачем вы использовали g. Просто для накопления данных в процессе обработки хватило бы и обычной переменной, а для хранения данных между запросами она не применима (Смотрите замечание на этот счет).
    2. Если вы сами ловите исключение, то и обрабатывать его лучше полностью, с указанием шаблона и кода ответа. На вашу проблему это не влияет, но это просто хорошая привычка, не делать ни чего, или доделывать до конца.
    3. Что подразумевает return внутри блока with? Если объявить переменную аккумулятор значений из файлов выше цикла по файлам, и вместо g.data_local ... и return ... написать код отправки прочитанного значения в накопитель, например как здесь, а потом передать содержимое аккумулятора в шаблон, под именем peopls, не получится именно тот эффект, которого вы и добивались?

    Пара мыслей помимо вашего кода:
    Какова дальнейшая судьба файлов, которые вы уже обработали, вы будете их читать опять, при следующей итерации? Если файлы будут добавляться достаточно часто, то каждый следующий запрос будет работать дольше предыдущего. Может стоит еще раз подумать?
    В зависимости от объема файлов и/или их количества, в особо тяжелых случаях, вы можете упереться в лимит времени ответа. Чинится это легко, но помнить об этом стоит.
    Ответ написан
    Комментировать
  • Как перенаправить url с одного приложения в другое?

    @Zanak
    В одной вкладке откройте страницу, на которую вам не удается перейти, в другой страницу, на которой стоит ссылка. Сравните, какая она есть, и какой должна быть. Возможно, что какая-то переменная не определена в контексте шаблона, и ссылка собирается некорректно. Если так, то проблема решится, как только вы отдадите шаблону все данные.
    Если вы собираете ссылки вручную, то можно поправить код, чтобы она стала верной, но это неправильный подход.
    Не слушайте вредных советов, используйте url в шаблонах и reverse в контролере, вместо ручной сборки ссылок. Это избавить вас от лишней работы, если вы решитесь сменить настройки вашего приложения, или переиспользовать его в другом проекте.
    Ответ написан
    Комментировать
  • Как добавить perl скрипт в python проект?

    @Zanak
    Конвертеров с perl на python нет, потому что эти языки достаточно разные. В простых случаях возможен подстрочный перевод, но это все равно должен делать человек.
    Наиболее правильный путь - не прикручивать верблюда к змее, а перенести все на один язык. Как минимум, это избавит вас от необходимости иметь 2 языка в системе со всеми зависимостями, которые этот винегрет требует. Perl далеко не так сложен, как принято о нем думать и книг по этому языку в сети полно, в том числе и на русском языке. Если вы знакомы с php, то на "освоится с различиями", достаточно для понимания происходящего, у вас уйдет часа 4 - 5. А дальше все упирается в скорость вашего кодинга на питоне.
    Если все таки идти по сложному пути, то нужны подробности по поводу perl части:
    - если задача запустить, дождаться окончания и продолжить работу, os.system вам поможет
    - если это сервис, который нужно запустить и потом с ним пообщаться из питона, то запускаться он должен как самостоятельный процесс, и здесь надо смотреть в сторону subprocess, например. этот же модуль позволит прибраться за собой, и завершить perl часть по окончании работы
    - если нужно запустить скрипт, и пообщаться с ним через его stdin/stdout, то смотрите на subprocess.Popen
    Ответ написан
    Комментировать
  • Данные в jquery-ui.autocomplete приходят, а список неотображается, ни кто не встречался с такой проблемой?

    @Zanak Автор вопроса
    Вопрос снят.
    Помогло явное указание z-index для контрола, к которому привязывается автокомплитер. Под пингвином все работало и без этого, а под M$ не пошло. Жаль, что я не разглядел этого в ворохе слоев раньше.
    Всем спасибо за внимание.
    Ответ написан
    Комментировать
  • Почему этот код не работает, и его нельзя убить с помощью ctrl+z?

    @Zanak
    у вас косяк в коде сервера вы listen и accept потеряли.
    Попробуйте почитать вот это.
    Ответ написан
  • Делаю граббер с помощью curl, практически всё работает. Но определенные ссылки не открывает?

    @Zanak
    Параметры разве не должны собираться с помощью "&"?
    Я бы еще посмотрел на эту функцию, для подготовки параметров перед отправкой.
    Ответ написан
    Комментировать
  • Циклы. While, do while, for, чем отличаются?

    @Zanak
    Как - то, почитал я ответы коллег, и остался разочарован. Понятно, что вопрос не простой, а очень простой, но можно и по аккуратнее в изложении. В общем, мои 5 копеек.
    Любой цикл - это кусок кода, который обычно называют телом цикла, и который мы желаем выполнить несколько раз. Количество повторений может быть заданно заранее, например: цикл от 0 до 10, зависеть от данных, например: для каждого элемента массива или зависеть от значения, которое мы в теле цикла вычисляем, например: пока f(x) > 0 выполнять. По крайней мере, во всех известных мне языках программирования, есть оператор досрочного выхода из цикла.
    while. Цикл с предварительным условием. Выполняется пока условие истинно. Проверка происходит до исполнения тела цикла. Если условие изначально ложно, то тело не выполнится ни разу. Если условие ни когда не станет ложным, то мы получим бесконечный цикл. Распространенные ошибки новичков, при использовании этого цикла:
    - условие не зависит от переменных, которые изменяются в теле цикла, и оно всегда получается истинным
    - условие ни когда не станет ложным, в силу его свойств, например: X * X >= 0 всегда верно
    Пример на php:
    $i = 1;
    while ($i <= 10) {
        echo $i;
        $i++;
    }

    do ... while. Цикл с постусловием. Отличие от предыдущего в том, что тело цикла исполняется хотя бы один раз, и после этого происходит проверка условия выхода из цикла. К типичным ошибкам предыдущего вида циклов добавляется то, что этот цикл гарантированно исполняется один раз, что не всегда желательно.
    В этом примере цикл отработает один раз, не смотря на то, что условие ложно:
    $i = 0;
    do {
        echo $i;
    } while ($i > 0);

    for. Чаще всего этот оператор описывает цикл с фиксированным количеством повторений. Вот так он может выглядеть, например, для php:
    for ($i = 1; $i <= 10; $i++) {
        echo $i;
    }

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

    @Zanak
    Не очень понятно, зачем вам питон, если вы на нем не разрабатываете.
    Но обо всем по порядку:
    - язык ставится в любом случае. php, python, ruby, что-то еще, в зависимости от того, какое приложение вы разворачиваете.
    - вебсервер вам в любом случае ставить. апач, нжинкс, лайти или что - то еще, это дело личных предпочтений.
    - БД тоже ставится по определению. установка соответствующего драйвера - обязательная процедура для любого языка.
    - установка сервера приложений. это тоже общая часть для любого языка. у каждого языка, почти наверняка, есть свое, специфичное решение. для python это gunicorn, для ruby unicorn, для perl, к примеру starman или twiggy, для php это php-fpm. можно использовать пакет uwsgi, который через плагины поддерживает несколько языков, чтобы один раз разобраться с настройками и потом просто пользоваться.
    - менеджер пакетов. это, если и не общее для всех языков, достаточно типичное решение. npm для ноды, cpan для perl, composer для php, например.
    - установка песочницы. для питона это virtualenv. этот инструмент позволяет дать запускаемым приложениям необходимые пакеты, не выполняя их установку в системный каталог. каждому приложению нужные именно ему версии пакетов! питон здесь тоже не уникален. для php или ruby, например, есть аналогичные инструменты. к стати, если на сервере будет жить единственное приложение, то этот шаг можно пропустить, и все зафигачить в системный каталог.
    - и только теперь установка самого фреймворка: pip install django. дальше по инструкции развертывания из документации к фреймворку, указать базу, накатить миграции ...

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