Django.contrib.auth.admin中的用户活动监控功能教程
Django.contrib.auth.admin是Django框架中用于管理用户身份验证和授权的模块。它提供了一些内置的功能,帮助您监控和管理用户的活动。在这篇教程中,我们将介绍Django.contrib.auth.admin中的用户活动监控功能,并提供一些使用例子。本教程将涵盖以下主题:
1. 启用用户活动监控
2. 用户登录和退出日志
3. 用户操作日志
4. 示例:显示用户的最近活动
1. 启用用户活动监控
要启用用户活动监控功能,您需要在settings.py文件中进行一些配置。首先,您需要在INSTALLED_APPS中添加'django.contrib.admin'和'django.contrib.auth':
INSTALLED_APPS = [
...
'django.contrib.admin',
'django.contrib.auth',
...
]
然后,您需要在MIDDLEWARE中添加'django.contrib.sessions.middleware.SessionMiddleware'和'django.contrib.auth.middleware.AuthenticationMiddleware':
MIDDLEWARE = [
...
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
...
]
最后,您需要在settings.py文件的末尾添加以下代码:
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
'django.contrib.auth.backends.RemoteUserBackend',
]
AUTH_USER_MODEL = 'auth.User'
完成以上配置后,您就可以启用用户活动监控功能了。
2. 用户登录和退出日志
Django.contrib.auth.admin模块提供了登录和退出的日志记录功能。要启用此功能,您需要在admin.py文件中注册UserAdmin类,并将日志功能包含进去:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User
class UserAdmin(BaseUserAdmin):
list_display = ('username', 'email', 'is_active', 'last_login')
logging = True # 启用日志记录功能
def save_model(self, request, obj, form, change):
if self.logging and change:
# 保存用户登录日志记录
print(f"User {obj.username} logged in at {timezone.now()}")
super().save_model(request, obj, form, change)
def delete_model(self, request, obj):
if self.logging:
# 保存用户退出日志记录
print(f"User {obj.username} logged out at {timezone.now()}")
super().delete_model(request, obj)
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
在上述代码中,我们在UserAdmin类中添加logging属性,并在save_model()和delete_model()方法中保存登录和退出的日志记录。您可以更改打印日志的方式,以适应您的具体需求。
3. 用户操作日志
除了登录和退出日志的记录,Django.contrib.auth.admin还提供了用户操作日志的记录功能。用户操作日志可以记录用户在后台管理页面中的各种操作,例如创建、编辑和删除对象等。要启用用户操作日志功能,您需要在admin.py文件中注册UserAdmin类,并使用@log_action装饰器来记录操作日志:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User
from django.contrib.admin import log as admin_log
class UserAdmin(BaseUserAdmin):
list_display = ('username', 'email', 'is_active', 'last_login')
logging = True # 启用日志记录功能
@admin_log.log_action('USER_CREATED') # 注册用户创建操作
def save_model(self, request, obj, form, change):
super().save_model(request, obj, form, change)
@admin_log.log_action('USER_DELETED') # 注册用户删除操作
def delete_model(self, request, obj):
super().delete_model(request, obj)
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
在上述代码中,我们使用@admin_log.log_action装饰器在save_model()方法和delete_model()方法上注册了用户创建和删除操作。您可以根据需要注册更多的操作类型。
4. 示例:显示用户的最近活动
现在我们已经启用了用户活动监控功能,让我们来看一个例子,如何在后台管理页面中显示用户的最近活动。
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User
class UserAdmin(BaseUserAdmin):
list_display = ('username', 'email', 'is_active', 'last_login', 'recent_activity')
logging = True # 启用日志记录功能
def recent_activity(self, obj):
# 获取最近登录和退出的日志记录
recent_logins = [log.time_stamp for log in obj.userloginlog_set.all() if log.action == 'LOGIN']
recent_logouts = [log.time_stamp for log in obj.userloginlog_set.all() if log.action == 'LOGOUT']
recent_activity = recent_logins + recent_logouts
# 对活动进行排序并取最近5个
recent_activity.sort(reverse=True)
recent_activity = recent_activity[:5]
return ', '.join(str(activity) for activity in recent_activity)
recent_activity.short_description = 'Recent Activity'
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
在上述代码中,我们定义了一个recent_activity方法来获取用户的最近活动记录。我们首先从用户登录和退出的日志中获取活动记录,并进行排序。然后,我们取最近的5个活动记录,并将其显示为字符串。
最后,我们将recent_activity方法添加到UserAdmin类的list_display中,以便在后台管理页面中显示用户的最近活动。
到此,我们已经完成了Django.contrib.auth.admin中的用户活动监控功能的教程,并提供了一些使用示例。您可以根据自己的需求进行定制和扩展,以满足特定的监控和管理需求。希望这篇教程对您有所帮助!
