Тут рассказ о том, как заставить стандартный django.contrib.comments работать через ajax. Цель была такова: минимальные изменения в клиентских view, чтобы работали стандартные templates перегружаемые, полноценная админка (обычная от приложения comments), да и вообще максимальное использование оригинального кода. Короче, в итоге после нескольких самопроизвольных переписываний (вместе с использованием подобного решения в проектах) получилась минимальная обёртка, которую по идее тоже можно вынести в отдельный app.
Да, скоро это уже не совсем актуально станет (django.contrib.comments устаревший и с версии 1.6 вынесен в отдельный проект), но решение отточилось на третьей версии и мне жалко его терять просто :) Пример тут для версии 1.5.
13 ноября 2013 г.
2 ноября 2013 г.
django: текущий пользователь в логах
Удобно в логах иметь текущего залогиненого юзера, чтобы видно было на ком падает, удобнее разбираться. Для логгера "django.request" передаётся экстра-параметр request. Его можно вытащить и залоггировать. Например, с помощью кастомного фильтра. Фильтр добавляет в вывод форматтера поле "user" с именем (строковое представление#id) юзера если оно есть. Фильтр вешается на нужные handlers. А в соответствующие formatters на этих handlers добавляется поле "user". В фильтре проверка на существование атрибутов request и request.user обязательна, если текущий formatter повешен на что-либо, кроме логгера "django.request", иначе будет падать в попытке найти поле с ид "user".
См. также про логгирование в файл django.
class RequestPushUserFilter(logging.Filter):
def filter(self, record):
if hasattr(record, 'request'):
if hasattr(record.request, 'user'):
record.user = u'%s#%s' % (record.request.user, record.request.user.pk)
else:
record.user = '?'
else:
record.user = '-'
return True
LOGGING = {
...
'filters': {
...
'request_pushuser_filter': {
'()': 'project.settings.RequestPushUserFilter',
},
},
...
'formatters': {
'standard': {
'format': "[%(asctime)s] %(levelname)s [%(name)s:%(module)s:%(lineno)s] [%(user)s] %(message)s",
'datefmt': '%d.%m.%Y %H:%M:%S',
},
},
...
'handlers': {
'logfile': {
...
'filters': ['request_pushuser_filter'],
...
'formatter': 'standard',
},
...В итоге в логах будет примерно так:[31.10.2013 00:43:20] ERROR [django.request:base:212] [Driver John#1] Internal Server Error: блабла
См. также про логгирование в файл django.
Теги:
программирование,
трюки,
django,
logging,
python
Подписаться на:
Комментарии (Atom)