欢迎访问宙启技术站
智能推送

Django.contrib.auth.admin中的用户活动监控功能教程

发布时间:2024-01-19 06:46:26

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中的用户活动监控功能的教程,并提供了一些使用示例。您可以根据自己的需求进行定制和扩展,以满足特定的监控和管理需求。希望这篇教程对您有所帮助!