Не работает flask python

Не работает hello world, простейший пример на flask

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как написать простейший пример «Hello World» на C++ в Visual Studio 2008?
Всем привет. Подскажите пожалуйста, как написать простейший Hello World на C++ в Visual Studio.

Простейший код-пример ASP.NET не работает.
Купил книгу там пример простейшего кода asp:Label .

Неправильно работает простейший пример паттерна Decorator
Доброе время суток! Решил попрактиковаться в С#, в visual studio набрал такое консольное.

Можно пример парсинга конфигов для Flask
Есть конфиг файл, как фласком спарсить?

а в браузере почему server error?

Добавлено через 15 минут
Я согласен, что код работает. Буду дальше изучать. Попробую hello world вывести.

Всё заработало
Это у меня было переполнение стека в pycharm.
До этого форк-бомбу свою тестировал, систему свою изучал на уязвимости.
Винду перегрузил и всё работает.

Добавлено через 2 минуты

Как в MS Visual Studio создать простейший консольный Hello World?
Здравствуйте, я новичок, хочу освоить программирование в C++, скачал для этого учебник Страуструпа.

Простейший пример в python 3
1) Как задаются переменные для ввода с клавиатуры? С синтаксисом совершенно не знаком и внятной.

Простейший пример с OpenGL (C++)
Дайте пример простейшей программы с использованием OpenGL которая рисовала бы например круг.

Простейший пример с комментариями
Всем доброго времени суток! Моя просьба заключается в следующем: так как я полный новичок в OpenGl.

Источник

Flask ImportError: нет модуля с именем Flask

Я следую руководству по Flask здесь:

Я дохожу до того, что пробую ./run.py и получаю:

ImportError: нет модуля с именем flask

Но их решения бесполезны. Для справки, я делать есть папка с именем flask, которая, по словам одного пользователя, может вызвать проблемы.

  • 1 @MalikBrahimi Когда я запускаю Python, а затем импортирую flask и проверяю, какую версию я установил, он возвращает «0.10.1». Так что вроде я установил .
  • 4 Вы говорите, что если вы запустите python, а затем выполните , у вас не будет ошибок? Возможно ли, что на вашем компьютере установлены версии Python?
  • 2 Можете ли вы вставить в этот файл (перед строкой, в которой происходит ошибка), а также запустить его в интерактивной подсказке?
  • 1 @ari Я пытался сделать виртуальную среду, но, возможно, что-то напортачило? и да, я использую Python 3.3, но думаю, что у меня есть 2.7, плавающие вокруг
  • 8 Вы не используете версию 3, вы используете версию 2, и у вас есть две копии Python версии 2 на вашем Mac, одна из которых поставляется с OSX, а другая установлена ​​вами. Итак, в общем — похоже, у вас есть три версии Python; Python3, Python2 (вы установили), Python2 (поставляется с системой). Похоже, вы здесь используете неправильную среду; место, где вы установили Flask, не является системным по умолчанию, и это, вероятно, причина вашей головной боли.

Попробуйте удалить созданный вами файл virtualenv. Затем создайте новый virtualenv с помощью:

Теперь давайте активируем virtualenv:

Теперь вы должны увидеть слева от командной строки.

Затем создайте файл с именем (ПРИМЕЧАНИЕ: см. ниже):

и запустите его с помощью:

ОБНОВЛЕНИЕ Flask 1.0.2

В новом выпуске flask отпадает необходимость запускать приложение из вашего скрипта. теперь должен выглядеть так:

и запустите его с помощью:

Убедитесь, что вы находитесь в папке, где находится , при выполнении последней команды.

Все шаги до создания hello.py применимы и к этому случаю.

  • 3 Вы можете разместить его где угодно, если вы запускаете его с включенным virtualenv.
  • Привет, я новичок в питоне. Все отлично работает с virtualenv в терминале. Но моя проблема в том, что я использую IDE Atom . может ли атом запускать код в той же среде virtualenv?

Для python 3 используйте

  • 4 После изменения моей версии python с 2.7 на 3 все заработало!
  • Да, это работает! Вместо выполнения pip install flask (который предназначен для python 2), если вы используете python3, вам нужно использовать pip3 install flask или другие расширения flask. Чтобы изменить версию Python, вы можете использовать псевдоним python = «python3».

Единственный способ решить эту проблему — добавить мой пользовательский каталог python в файл myapp.wsgi. В качестве примера:

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

  • или сделав это
  • Сработал для меня, спасибо!

После активации виртуальной среды и установки Flask я создал файл app.py. Я запускаю его так: . Надеюсь, это поможет!

  • Не уверен, почему это работает, возможно, это связано с путем. Любое представление об этом?

У меня была аналогичная проблема с flasgger.

Причина в том, что я всегда использую

но по какой-то причине это не всегда правильный путь. Иногда вам нужно просто

Еще одна проблема заключается в том, что иногда люди набирают с крышка F

Публикуем это здесь на случай, если кто-то застрянет. Сообщите мне, помогло ли это.

Полезная ссылка: В чем разница между установкой pip и sudo pip install?

это то, что сработало для меня,

Или для pip3 (python3) используйте:

Если вы используете virtualenv, рекомендуется использовать , чтобы разрешить список установленных пакетов в одном месте. Команда и флаг . Чтобы узнать больше о флаге , посмотрите ответ Пола. Надеюсь, это тебе поможет.

Я использовал python2, но установил это: sudo apt-get install libapache2-mod-wsgi-py3

Вместо: sudo apt-get install libapache2-mod-wsgi

Исправление установки решило проблему отсутствия колбы.

  • 1 Ах это простые вещи. У меня был неправильный мод libapache wsgi в моем файле докеров после обновления до python 3 . есть +1

В моем случае решение было таким простым, как запуск моей виртуальной среды следующим образом:

Оказывается, я еще новичок в Python 🙂

  1. Изменить
  2. Добавьте следующие две строки перед строкой «WSGIScriptAlias»:

Я тоже следую руководству по Flask, и я столкнулся с той же проблемой. Я нашел способ исправить это.

Перейдите к файлу flask в микроблоге, затем активируйте виртуальную среду с помощью , затем перейдите в flask / bin и установите flask, а остальные пакеты — . Вы увидите flask, указанный внутри каталога bin. Попробуйте снова запустить из микроблога (или откуда у вас есть файл).

Даже я тоже предлагаю вам virtualenv, это также может решить вашу проблему.

Читайте также:  Сони бравиа как настроить универсальный пульт

Если вы хотите развернуть сервер на продакшене, воспользуйтесь вышеуказанным решением, иначе используйте virtualenv.

Вот что сработало у меня, когда я получил аналогичную ошибку в Windows; 1. Установите virtualenv

Перейдите к Сценариям и активируйте virtualenv

python -m pip install flask

Проверить, установлена ​​ли колба

python -m список пипсов

войдите в интерактивный режим Python, затем:

он напечатает ваш путь. Убедитесь, что фляга установлена ​​в sys.path.

Для MacOS путь python находится в /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

Но по умолчанию pip установит пакет python в /Library/Python/2.7/site-packages

Вот почему это не работает для MacOS.

Сценарий flask хорош для запуска локального сервера разработки, но вам придется перезапускать его вручную после каждого изменения вашего кода. Это не очень хорошо, и Flask может работать лучше. Если вы включите поддержку отладки, сервер будет перезагружаться при изменении кода, а также предоставит вам полезный отладчик, если что-то пойдет не так. Чтобы включить режим отладки, вы можете экспортировать переменную среды FLASK_DEBUG перед запуском сервера: например, ваш файл — hello.py

в моем случае с использованием Docker мой файл .env не был скопирован, поэтому следующие переменные env не были установлены:

поэтому в моем мне пришлось включить:

на который есть ссылка в docker-compose.yml

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

мой ответ только для всех пользователей, которые используют веб-проект Visual Studio Flesk:

Просто щелкните правой кнопкой мыши «Среда Python» и нажмите «Добавить среду».

Если вы используете Pycharm, то это проблема виртуальной среды.

Итак, во время создания проекта Python вам нужно будет выбрать опцию «Существующий интерпретатор» -> щелкнуть «Системный интерпретатор» -> выбрать правильный вариант, например «* \ AppData \ Local \ Programs \ Python \ Python3.6 \» python.exe «.

Вы также можете использовать «New Virtual Env», но я только что дал быстрое исправление, которое должно работать для пользователей Pycharm.

Другое дело — если вы используете python3, убедитесь, что вы запускаете свой сервер с , а не с .

Это сработало для меня после обновления pip:

Источник

Не работает отладка flask (debug)

Запускаю код в отладке:

но отладка не работает, выкидывая ошибку:

Причем, если запустить под отладкой подобный код:

то работает нормально.

Подскажите, пожалуйста, кто знает, в чем причина ошибки работы отладки?

2 ответа 2

Похоже, что при запуске под отладчиком падает при передаче __name__ , когда оно равно ‘__main__’ , т.е. когда модуль не импортирован, а запущен.

Скорее всего падение связано с тем, что при отладке скрипт запускается не напрямую, а через хелпер отладчика. У меня в консоли PyCharm при запуске пишет вот такое:

При запуске без отладчика:

Если используете PyCharm Professional, то запускать с помощью конфигурации «Flask Server», а не просто «Python»

Первый параметр класса Flask называется import_name (т.е. импортируемое имя), как вариант можно передавать имя текущего модуля из глобальной переменной __file__ , например так:

Передать вообще любую строку кроме ‘__main__’ , и чтобы она не была похожа на имя файла, например со строкой app = Flask(«sdfsdf sdf») запустится нормально, а app = Flask(«sdfsdf.sdf») упадет с ошибкой. Но в целом надежнее использовать предыдущий вариант.

Вариант, который не сработал:

При запуске через конфигурацию «Flask Server» PyCharm Professional выводит в консоль следующее:

Т.е. заполняются некоторые переменные окружения и указывается текущая директория.

Пробовал добавлять те же переменные окружения в конфигурации запуска (поле Environment variables), указывать рабочую директорию (поле «Working directory»), но это не помогло, при запуске под отладчиком падает с тем же исключением.

Источник

Мега-Учебник Flask, Часть 7: Обработка ошибок (издание 2018)

Miguel Grinberg

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

Я, со своей стороны, постараюсь не отставать с переводом.

Это седьмая глава серии Flask Mega-Tutorial, в которой я расскажу вам, как выполнять обработку ошибок в приложении Flask.

Для справки ниже приведен список статей этой серии.

Примечание 1: Если вы ищете старые версии данного курса, это здесь.

Примечание 2: Если вдруг Вы хотели бы выступить в поддержку моей(Мигеля) работы в этом блоге, или просто не имеете терпения дожидаться неделю статьи, я (Мигель Гринберг)предлагаю полную версию данного руководства упакованную электронную книгу или видео. Для получения более подробной информации посетите learn.miguelgrinberg.com.

В этой главе я перехожу от кодирования новых функций для моего микроблогического приложения и вместо этого обсужу несколько стратегий борьбы с ошибками, которые неизменно появляются в любом программном проекте. Чтобы проиллюстрировать эту тему, я намеренно допустил ошибку в коде, который я добавил в главе 6. Прежде чем продолжить чтение, посмотрите, сможете ли вы его найти!

Обработка ошибок в Flask

Что происходит, когда возникает ошибка в приложении Flask? Лучший способ узнать это — испытать это самому. Запустите приложение и убедитесь, что у вас зарегистрировано не менее двух пользователей. Войдите в систему как один из пользователей, откройте страницу профиля и нажмите ссылку «Изменить». В редакторе профиля попробуйте изменить имя пользователя на существующее имя другого пользователя, который уже зарегистрирован, и попытайтесь применить исправления! Это приведет к появлению страшной страницы «Internal Server Error» ( «Внутренняя ошибка сервера» ):

В сеансе терминала, на котором запущено приложение, вы видите трассировку стека ошибки. Трассировки стека чрезвычайно полезны при отладке ошибок, поскольку они показывают последовательность вызовов в этом стеке, вплоть до строки, вызвавшей ошибку:

Трассировка стека указывает, чем вызвана ошибка. Приложение позволяет пользователю изменять имя пользователя без проверки, что новое имя пользователя не совпадает с другим пользователем, уже находящимся в системе. Ошибка возникает из SQLAlchemy, которая пытается записать новое имя пользователя в базу данных, но база данных отвергает его, потому что столбец имени пользователя определен с unique = True.

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

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

Читайте также:  Ресивер u2c не работает

Режим отладки

То, как ошибки обрабатываются выше, отлично подходит для системы, которая работает на production сервере. Если есть ошибка, пользователь получает страницу с неопределенной ошибкой (хотя я собираюсь сделать эту страницу с ошибкой более приятной), а важные данные об ошибке — в выводе сервера или в файле журнала.

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

Если вы работаете в ОС Microsoft Windows, не забудьте использовать set вместо экспорта.

После того, как вы установили FLASK_DEBUG, перезапустите сервер. Строки на вашем терминале будут немного отличаться от того, что вы привыкли видеть:

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

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

Крайне важно, чтобы вы никогда не запускали приложение Flask в режиме отладки на рабочем сервере. Отладчик позволяет удаленно выполнять код на сервере, поэтому он может стать неожиданным подарком злоумышленнику, который хочет проникнуть в ваше приложение или на ваш сервер. В качестве дополнительной меры безопасности отладчик, запущенный в браузере, закроется, и при первом использовании запросит PIN-код, который вы можете увидеть на выходе команды flask run .

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

Пользовательские страницы ошибок

Flask предоставляет механизм приложения для создания собственных страниц ошибок, так что вашим пользователям не нужно видеть простые и скучные значения по умолчанию. В качестве примера давайте определим пользовательские страницы ошибок для ошибок HTTP 404 и 500, двух наиболее распространенных. Определение страниц для других ошибок работает одинаково.

Чтобы объявить пользовательский обработчик ошибок, используется декоратор @errorhandler . Я собираюсь поместить обработчики ошибок в новый модуль app/errors.py.

Функции ошибок работают аналогично функциям просмотра. Для этих двух ошибок я возвращаю содержимое их соответствующих шаблонов. Обратите внимание, что обе функции возвращают второе значение после шаблона, который является номером кода ошибки. Для всех функций представления, которые я создал до сих пор, мне не нужно было добавлять второе возвращаемое значение, потому что по умолчанию 200 (код состояния для успешного завершения) — это то, что я хотел. Сейчас это страницы с ошибками, поэтому я хочу, чтобы код состояния ответа это отражал.

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

Вот шаблон для ошибки 404:

И вот одна из ошибок 500:

Оба шаблона наследуют шаблон base.html , так что страница с ошибками имеет тот же внешний вид, что и обычные страницы приложения.

Чтобы получить эти обработчики ошибок, зарегистрированные в Flask, мне нужно импортировать новый модуль app/errors.py после создания экземпляра приложения:

Если вы установили FLASK_DEBUG = 0 в сеансе терминала и затем снова вызвали ошибку повторного имени пользователя, вы увидите более приятную страницу с ошибкой.

Или так! Рекомендую придумать что то свое в качестве упражнения.

Отправка ошибок по электронной почте

Другая проблема с обработкой ошибок по умолчанию, предоставляемой Flask, заключается в том, что нет уведомлений! Трассировка стека ошибки печатается на терминале, а это означает, что вывод процесса сервера должен контролироваться на обнаружение ошибок. Когда вы запускаете приложение во время разработки, это нормально, но как только приложение будет развернуто на production сервере, никто не будет смотреть на результат, поэтому необходимо создать более надежное решение.

Я думаю, что очень важно, чтобы я активно реагировал на ошибки. Если в production версии приложения возникает ошибка, я хочу знать сразу. Таким образом, моим первым решением будет сконфигурировать Flask для отправки мне сообщения по email сразу после возникновения ошибки с трассировкой стека ошибки в сообщении электронной почты.

Первым шагом является добавление данных сервера электронной почты в файл конфигурации:

Переменные конфигурации для электронной почты содержат сервер и порт, флаг для включения зашифрованных соединений и необязательное имя пользователя и пароль. Пять переменных конфигурации получены из их сопоставлений переменным среды. Если сервер электронной почты не установлен в среде, то я буду использовать это как знак того, что ошибки электронной почты должны быть отключены. Порт сервера электронной почты также можно указать в переменной среды, но если он не установлен, используется стандартный порт 25. Учетные данные почтового сервера по умолчанию не используются, но могут быть предоставлены при необходимости. Переменная конфигурации ADMINS представляет собой список адресов электронной почты, которые будут получать отчеты об ошибках, поэтому ваш собственный адрес электронной почты должен быть в этом списке.

Flask использует пакет logging Python для ведения своих журналов, а этот пакет уже имеет возможность отправлять журналы по электронной почте. Все, что мне нужно сделать, чтобы отправлять электронные сообщения, содержащие ошибки, — это добавить экземпляр SMTPHandler в объект журнала Flask, которым является app.logger :

Как видно, я включил регистратор электронной почты только, когда приложение работает без режима отладки, что определено приложением в app.debug как True , а также когда сервер электронной почты существует в конфигурации.

Настройка почтового регистратора несколько утомительна из-за необходимости обрабатывать дополнительные параметры безопасности, которые присутствуют на многих серверах электронной почты. Но в сущности, вышеприведенный код создает экземпляр SMTPHandler , устанавливает его уровень, чтобы он отправлял только сообщения об ошибках, а не предупреждения, информационные или отладочные сообщения и, наконец, прикреплял их к app.logger из Flask.

Существует два подхода к проверке работоспособности этой функции. Самый простой способ — использовать SMTP-сервер отладки от Python. Это ложный почтовый сервер, который принимает сообщения электронной почты, но вместо их отправки выводит их на консоль. Чтобы запустить этот сервер, откройте второй сеанс терминала и запустите на нем следующую команду:

Оставьте запущенный SMTP-сервер отладки и вернитесь к своему первому терминалу и установите export MAIL_SERVER = localhost и MAIL_PORT = 8025 (используйте set вместо export , если вы используете Microsoft Windows). Убедитесь, что для переменной FLASK_DEBUG установлено значение 0 или не установлено вообще, так как приложение не будет отправлять электронные письма в режиме отладки.
Запустите приложение и вызовите ошибку SQLAlchemy еще раз, чтобы узнать, как сеанс терминала, на котором работает поддельный почтовый сервер, показывает электронное письмо с полным содержимым стека ошибки.

Читайте также:  Монитор samsung syncmaster b2030 как настроить

Второй метод тестирования для этой функции — настроить настоящий почтовый сервер. Ниже приведена конфигурация для использования почтового сервера для учетной записи Gmail:

Если вы используете Microsoft Windows, не забудьте использовать set вместо export в каждой из приведенной выше инструкции.

Функции безопасности вашей учетной записи Gmail могут препятствовать приложению отправлять электронную почту через нее, если вы явно не разрешаете «less secure apps» («менее безопасным приложениям») доступ к вашей учетной записи Gmail. Прочитать об этом можно здесь, и если вас беспокоит безопасность вашей учетной записи, можно создать вторичную учетную запись, которую настройте только для проверки электронной почты, или временно включите разрешение для менее безопасных приложений на время запуска этого теста, а затем вернитесь к умолчанию.

Запись лога в файл

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

Чтобы включить ведение журнала другого обработчика, на этот раз типа RotatingFileHandler необходимо включить logger приложения аналогично обработчику электронной почты.

Я пишу логфайл с именем microblog.log в каталоге logs, который я создаю, если он еще не существует.

Класс RotatingFileHandler удобен, потому что он переписывает журналы, гарантируя, что файлы журнала не будут слишком большими, если приложение работает в течение длительного времени. В этом случае я ограничиваю размер логфайла 10 КБ, и храню последние десять файлов журнала в качестве резервных копий.

Класс logging.Formatter предоставляет настройку формата сообщений журнала. Поскольку эти сообщения отправляются в файл, я хочу, чтобы они содержали как можно больше информации. Поэтому я использую формат, который включает отметку времени, уровень ведения журнала,
сообщение, исходный файл и номер строки, откуда возникла запись в журнале.

Чтобы сделать регистрацию более полезной, я также понижаю уровень ведения журнала до категории INFO , как в регистраторе приложений, так и в обработчике файлов. Если вы не знакомы с категориями ведения журнала, это DEBUG , INFO , WARNING , ERROR и CRITICAL в порядке возрастания степени тяжести.

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

Исправление дубля имени пользователя

Я слишком долго использовал ошибку дублирования имени пользователя. Теперь, когда я показал вам, как подготовить приложение для обработки подобных ошибок, я могу наконец-то это исправить.

Если вы помните, RegistrationForm уже выполняет проверку для имен пользователей, но требования формы редактирования немного отличаются. Во время регистрации мне нужно убедиться, что имя пользователя, введенное в форму, не существует в базе данных. В форме профиля редактирования я должен выполнить ту же проверку, но с одним исключением. Если пользователь оставляет исходное имя пользователя нетронутым, то проверка должна его разрешить, поскольку это имя пользователя уже назначено этому пользователю. Ниже вы можете увидеть, как я выполнил проверку имени пользователя для этой формы:

Реализация выполняется в специальном методе проверки, функция super в конструкторе класса, который принимает исходное имя пользователя в качестве аргумента. Это имя пользователя сохраняется как переменная экземпляра и проверяется в методе validate_username() . Если имя пользователя, введенное в форму, совпадает с исходным именем пользователя, то нет причин проверять базу данных на наличие дубликатов.

Чтобы использовать этот новый метод проверки, мне нужно добавить исходный аргумент имени пользователя в функцию вида, где создается объект формы:

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

На этом этапе вы можете попытаться воспроизвести ошибку еще раз, чтобы увидеть, как ее предотвращает метод проверки формы.

Работа над ошибками

Решил я проверить получение сообщений ошибки админу на почту. Для этого я испортил модуль routes.py . Для этой самой «порчи», я закомментировал декоратор @app.route(‘/edit_profile’, methods=[‘GET’, ‘POST’]) перед def edit_profile() . В итоге получил ошибку и в файл лога все это вывалилось, а вот письмо не прилетело. Я использую Python 3.3. Возможно в более новых версиях этого и не случится. Но в Windows 7 с русской раскладкой это случилось.

При попытке отправить сообщение админу приложение получило ошибку кодировки при формировании сообщения. В окне консоли содержались такие строки:

Как видим ссылка указывает на директорию в стандартном питоне, а не в виртуальном окружении.

logging в 3-й версии является стандартной библиотекой Python, поэтому вам не нужно устанавливать ее используя pip .

И модуль протоколирования, который вы можете найти в PyPI, устаревший, а не Python3-совместимый.

(Согласно файлу README его последняя версия была выпущена 02 марта 2005 года.)

Поэтому просто не пытайтесь установить logging.
Возьмите новый модуль в стандартной библиотеке как должное. Если вам принципиально использовать его в виртальной библиотеке.

После копии в venv\Lib logging импортируется из виртуальной среды

Еще раз получаю ошибку

logging теперь виртуальный. А вот smtplib стандартный.

Не думаю, что надо тащить все библиотеки из стандартной среды в виртуальную.
Ошибка от этого не исчезнет.

Проблема с кодировкой в сообщении решается использованием стандартного пакета email для создания сообщения с указанием предпочитаемой кодировки.

Вот пример с просторов интернета для этого пакета :

Но, как это применить для отправки сообщений об ошибке?!
Может кто-то предложит в комментариях к статье.

В модуле flask-mail эта ситуевина вроде как поправлена. Но тут используется logging и smtplib

В итоге пока так. Поправил я строку в модуле smtplib.py .

И после перезапуска сервера при искусственной ошибке я, наконец-то, получил сообщение на почту.

Источник

Оцените статью