Цель лекции: Ознакомиться с особенностями отладки Django; рассмотреть понятие протоколирования и его особенностями; научиться использовать интерактивный отладчик; ознакомиться с отладочной панелью.
Ключевые термины: django, журнал, модуль, python ,панель, отладка, функция, протокол, файл, команда, код, path, фильтр, обработчик, трассировка
В этой лекции мы узнаем три вещи о веб-разработке на Django, которые должен знать каждый программист. Это концепции и техники, которые вам понадобятся, если что-то пойдем не так.
Каждое приложение, запущенное в рабочей фазе, должно иметь включенное ведение файла отчетов; если этого не сделать, потом будет трудно объяснить, что и где пошло не так.
Django использует базовое протоколирование Python, так что мы рассмотрим детально базовое протоколирование Python в следующем разделе и увидим, как мы можем использовать службу протоколирования для записи в файл отчета в Django.
Формальное определение протоколирования – это отслеживание событий программного обеспечения. Разработчики вызывают службу протоколирования, чтобы определить, что событие произошло или происходит. Протоколирование может содержать некоторое описание или значение какой-либо важной переменной, которое нужно отследить.
Модуль Python logging поставляется с пятью функциями для ведения файлов отчетов, которые распределены по категориям в зависимости от серьезности события. Это debug(), info(), warning(), error() и critical().
Они подразделяются на категории в порядке их серьезности (начиная от наименее серьезной до самой серьезной):
Модуль logging делится на следующие четыре категории:
Каждый регистратор состоит из предыдущих пяти функций протоколирования. Каждое сообщение, которое записывается в журнал называется записью журнала. Запись журнала содержит серьезность файла отчета, а также важные переменные файла отчета или детали, такие как код ошибки или полная трассировка стека.
Средства ведения журнала, сами имеют уровень регистрации, который работает так: если уровень регистраций сообщения журнала больше или равен уровню регистрации журнала, тогда сообщение будут обработано далее для протоколирования; в противном случае оно будет игнорироваться средством ведения журнала.
Когда предварительная обработка средства ведения журнала для оценки регистрации будет завершена и в результате журнал должен быть обработан, а затем сообщение передается в обработчик.
Так же, как средства ведения журнала, обработчики также имеют уровень регистрации. Сообщения журнала игнорируются обработчиком, если уровень регистрации записи журнала не больше или равен уровню обработчика.
Несколько обработчиков могут быть прикреплены к средству ведения журнала, например, может быть обработчик для ведения средства ведения журнала, которое отправляет сообщения ERROR и CRITICAL и по электронной почте, тогда как другой обработчик может записывать тот же самый журнал в файл для последующего анализа отладки.
Это процесс может быть прерван для дополнительной оценки путем применения фильтра.
Например, фильтр разрешает только один источник для записи сообщения ERROR с обработчиком.
Фильтр также может использоваться для изменения приоритета записи журнала, так что средство журналирования и обработчик запускаются соответственно.
Чтобы включить ведение журнала в нашем приложении, мы сначала создадим средство ведения журнала. Нам нужно создать словарь регистрации в файле settings.py, который описывает средства журналирования, обработчики, фильтры и средства форматирования.
Полную документация о настройке ведения журнала можно найти на httpS://docs.Python.org/2/Library/Logging.config.HTML
Следующий фрагмент является простым примером настройки ведения журнала:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'file':{
'level':'DEBUG',
'class': 'logging.FileHandler',
'formatter': 'simple',
'filename': 'logs/debug.log',
}
},
'loggers': {
'django': {
'handlers':['file'],
'propagate': True,
'level':'INFO',
},
}
}
Этот журнал установки определяет один регистратор (Django), тот что нужен для запроса Django и обработчик (файл), который записывает в файл журнала с модулем форматирования.
Мы будем использовать то же самое для тестирования протоколирования для нашего проекта mytweet.
Теперь нам нужно сделать запись журнала в представлении, где мы хотим отслеживать событие.
Чтобы протестировать проект, мы обновим наш класс перенаправления профиля пользователя, чтобы он делал запись в журнал, если неавторизованный пользователь пытается получить к нему доступ, и, кроме того, когда зарегистрированный пользователь пытается открыть URL-адрес.
Откройте файл tweet/view.py и измените класс UserRedirect в соответствии со следующим:
class UserRedirect(View):
def get(self, request):
if request.user.is_authenticated():
logger.info('authorized user')
return HttpResponseRedirect('/user/'+request.user.username)
else:
logger.info('unauthorized user')
return HttpResponseRedirect('/login/')
Кроме этого, инициализируйте средство ведения журнала с помощью оператора import и добавьте следующий код для выполнения предыдущего кода:
import logging
logger = logging.getLogger('django')
Вот так. Теперь, откройте браузер и кликните по URL-адресу http://localhost:8000/prоfile.
Вы будете перенаправлены на страницу входа, если вы еще не вошли в систему.
Теперь откройте файл debug.log. Он содержит информацию о неавторизованном пользователе, это означает, что наш журнал прекрасно работает:
INFO unauthorized user
Отладка — это процесс поиска и устранения ошибок (багов). Когда мы разрабатываем веб-приложения с помощью Django, у нас часто появляется необходимость знать значения переменных, отправленных в запросе AJAX.
Инструментами для отладки являются:
Это набор панелей, используемый для отображения различных сведений о запросе / ответе текущей страницы и раскрывающий больше подробностей при нажатии на панель.
Вместо того чтобы просто отображать отладочную информации в HTML комментариях, отладочная панель Django отображает его более продвинутым способом.
Чтобы установить отладочную панель Django, выполните следующую команду:
pip install django-debug-toolbar
После установки нам нужно сделать изменения в базовой конфигурации, чтобы увидеть отладочную панель Django.
Добавьте параметр debug_toolbar к переменной INSTALLED_APPS в файле settings.py:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'user_profile',
'tweet',
'social.apps.django_app.default',
'tastypie',
'debug_toolbar',
)
Это более чем достаточно для простого проекта Django. Отладочная панель Django будет автоматически корректировать себя, когда сервер запущен в режиме разработки.
Перезапустите сервер.Как вы можете видеть, в правой часть профиля пользователя есть панель. Отладочная панель Django имеет много панелей, из них есть некоторые, установленные по умолчанию, как мы видим на предыдущем скриншоте, а некоторые являются сторонними, которые могут быть установлены по желанию.
Теперь мы обсудим панели, установленные по умолчанию:
VersionPath: debug_toolbar.panels.versions.VersionsPanel. Эта панель показывает основную информацию, такую как версию Python, Django и других установленных приложений, если такая информация доступна
Использование ресурсов: Показывает потребление ресурсов Django на машине сервера.
Тайминг браузера: Показывает детали на клиентской стороне. Время запроса и ответа имеют жизненно важное значение для знания, может ли фрагмент кода быть оптимизирован, и можно посмотреть загрузку, если слишком большое отображение замедляет получаемые страницы.
SettingsPath:debug_toolbar.panels.Settings.SettingsPanel.
Список параметров которые определены в файле settings.py являются заголовками
Path: debug_toolbar.panels.headers.HeadersPanel
Эта панель показывает переменные фреймворка, начиная от переменных представлений, которые так же являются переменными ratancs; затем Cookies, Session, переменные GET, POST, они могут быть полезны при отладке форм отправки.
SqlPath: debug_toolbar.panels.sql.SQLPanel
Эта панель очень важна, так как содержит SQL-запросы, создаваемые к базе данных при запросе страницы. Это очень помогает во время масштабирования приложения, запросы могут быть здесь просмотрены и скомбинированы вместе, чтобы уменьшить промахи по базе данных и улучшить производительность запроса страницы.
Показывается также фрагмент кода, который делает SQL-запрос, что очень полезно при отладке приложения.
StaticFilesPath: debug_toolbar.panels.staticfiles.StaticFilesPanel
TemplatePath: debug_toolbar.panels.templates.TemplatePanel
Это показывает нам список шаблонов и контекста, связанного с данным запросом
CachePath: debug_toolbar.panels.cache.CachePanel
Если мы включили кэш. то здесь отобразятся детали кэш-попаданий по данному URL-адресу
SignalPath: debug_toolbar.panels.signals.SignalsPanel
Эта панель показывает список сигналов и их аргументов и получателей
LoggingPath: debug_toolbar.panels.logging.LoggingPanel
Если вы включили протоколирование, эта панель отобразит сообщения журнала, как показано на следующем скриншоте:
RedirectPath: debug_toolbar.panels.redirects.RedirectsPanel
Когда присутствует страница перенаправления на URL-адрес, включите ее для отладки промежуточной страницы. Как правило вы не можете отладить URL перенаправления, таким образом, по умолчанию эта функция отключена
Ipdb — интерактивный отладчик исходного кода для Python программ.
Выполните следующую команду, чтобы установить Ipdb:
pip install ipdb
Ipdb является интерактивным способом отладки приложения Python. После установки Ipdb, для использования его в любой функции, просто напишите следующий код:
import ipdb; ipdb.set_trace()
Эта магическая строка остановит вся выполнение Django, где этот код присутствует и даст вам активную консоль, где вы можете отыскать баги или проверить значение переменной в режиме реального времени.
Сочетания клавиш для ipdb (когда вы находитесь в активной консоли):
n: следующий элемент
ENTER: Повторить предыдущее
quit: выход
p <variable>: Печатает значение
c: продолжить
l: список, где вы находитесь
s: шаг в подпрограмме
r: продолжать до конца подпрограммы
!<python command="">: Выполнить команду Python внутри активной консоли
Можно сделать больше, чем то, что рассматривается в настоящей лекции. Вам были даны основы отладки, которые мы собираемся использовать в наших проектах Django. Вы узнали, как войти и отладить наш код для лучшей и более эффективной практики кодирования. Мы также узнали, как использовать Ipdb для больших возможностей отладки.
В следующей лекции вы узнаете о различных способах развертывания наших проектов Django.
Контрольные вопросы
Упражнения
Упражнение 1.
Установите панель MOngoDB
Упражнение 2.
Установите панель Template Profiler
Упражнение 3.
Установите панель User
Упражнение 4.
Установите панель Template Timings
Список рефератов
Краткие итоги
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.