`

Django admin 日志管理

 
阅读更多

   django拥有自己的admin页面,同时它有自己的一套日志管理结构。正常的日志存放在django_admin_log表中,查看日志可以直接在django的管理页面查看。然而,它的日志记录比较简单,且存放在数据库中。如何扩展他呢?

 

   由于django的管理model,均采用类似方法:

 

 

class ApplicationAdmin(admin.ModelAdmin):
    list_display = ('id','key','name', 'description', 'type','apphandler','argument','create','modified')
    search_fields = ('key','name','description')
admin.site.register(Application,ApplicationAdmin)
 

 

  实际的日志记录逻辑均在父类ModelAdmin中实现,具体在django.conrtrib.admin.options中。

 

 

    def log_addition(self, request, object):
        """
        Log that an object has been successfully added.

        The default implementation creates an admin LogEntry object.
        """
        from django.contrib.admin.models import LogEntry, ADDITION
        LogEntry.objects.log_action(
            user_id         = request.user.pk,
            content_type_id = ContentType.objects.get_for_model(object).pk,
            object_id       = object.pk,
            object_repr     = force_unicode(object),
            action_flag     = ADDITION
        )

    def log_change(self, request, object, message):
        """
        Log that an object has been successfully changed.

        The default implementation creates an admin LogEntry object.
        """
        from django.contrib.admin.models import LogEntry, CHANGE
        LogEntry.objects.log_action(
            user_id         = request.user.pk,
            content_type_id = ContentType.objects.get_for_model(object).pk,
            object_id       = object.pk,
            object_repr     = force_unicode(object),
            action_flag     = CHANGE,
            change_message  = message
        )

    def log_deletion(self, request, object, object_repr):
        """
        Log that an object will be deleted. Note that this method is called
        before the deletion.

        The default implementation creates an admin LogEntry object.
        """
        from django.contrib.admin.models import LogEntry, DELETION
        LogEntry.objects.log_action(
            user_id         = request.user.id,
            content_type_id = ContentType.objects.get_for_model(self.model).pk,
            object_id       = object.pk,
            object_repr     = object_repr,
            action_flag     = DELETION
        )
 

 

    大家一看就明白,下一步做什么了,直接覆写,或是拦截一下,修改一下message信息:

class DemoAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'description', 'create','modified')
    search_fields = ('name', 'description',)
    def log_change(self, request, object, message):
        newmessage= "xxxx"    //将消息改写为xxx
        super(SpaceAdmin, self).log_change(request, object, newmessage)
    class Meta:
        pass
    class Admin:
 

   这样就可以完成日志改写了,或者直接叫个log也没啥问题。

 

 

 

 

推荐阅读:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#ref-contrib-admin

               http://www.ibm.com/developerworks/cn/opensource/os-django-admin/

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics