В предыдущей статье было описано как реализовать журнал действий пользователь. Здесь будет рассмотрено как просмотреть журнал в админке.
Для начала, сама процедура отображения содержимого файла.
views.py:
def log(request, userid):
#по идентификатору выбираем строку из БД с данными о текущем пользователе
user = LogUser.objects.get(id=userid)
username = user.name
#указываем путь к фалу лога пользователя
url = settings.LOG_FILE_PATH.format(user=username) #MEDIA_ROOT+log.log'
#считываем информацию из файла
f = open(url, 'r')
log = f.readlines()
#создаем переменную лога для передачи на html страницу
context = {'log_lines': log}
return render_to_response('reg_inf/user_log.html', context)
После подключения админки (расскобить две строки в урлах:)), в файле models.py, пишем:
from django.contrib import admin
#импортируем Стандартную джанговскую модель User
#как с ней работать написано здесь
from django.contrib.auth.models import User
#модель, для отображения имени юзера и поля лога
from reg_inf.models import LogUser
from django.contrib.auth.admin import UserAdmin
#импортируем процедуру из views.py
from reg_inf.views import log
admin.autodiscover()
#процедура, для отображения ссылки в админке на файл лога
def user_view_log_link(user):
#id юзека, для определения имени в БД
p = user.id
#возвращаем ссылку, при нажатии на которую, вызывается процедура log
#ей передается id юзера, на против которого была нажата ссылка
return '<a href="%s">:Журнал</a>' % reverse(log, args=[p])
#создаем дополнительное поле для ссылки
user_view_log_link.allow_tags = True
#создаем класс, для отображения в админке
class MyUser(admin.ModelAdmin):
list_display = ('name', user_view_log_link,)
#регистрируем модель LogUser как потомка MyUser
admin.site.register(LogUser, MyUser)
Для корректной передачи id юзера, необходимо записать в url.py:
urlpatterns = patterns('reg_inf.views',
(r'^log/(?P<userid>\d+)$', 'log'),
Конешно можно было отобразить ссылку на файл прямо в стандартной модели User. Для этого её необходимо выгрузить из джанго и щзарегать снова. Но как показывает опыт, при таком отображении локально все работает отлично, при закгрузке на сервер под Апачем, а именно, ссылка то проподает, то появляется снова, то админка не грузиться.