Django admin 로그 관리

3919 단어 django
django는 자신의admin 페이지를 가지고 있으며, 동시에 자신만의 로그 관리 구조를 가지고 있다.정상적인 로그는django 에 저장됩니다admin_log표에서 로그 보기는django의 관리 페이지에서 직접 볼 수 있습니다.그러나 로그 기록은 비교적 간단하고 데이터베이스에 저장된다.어떻게 그를 확장합니까?
 
django의 관리 모델 때문에 다음과 같은 방법이 사용됩니다.
 
 
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)
 
 
실제 로그 기록 논리는 부모 모델Admin에서 이루어지는데 구체적으로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
        )
 
 
다음 단계에 무엇을 했는지 여러분이 보시면 알 수 있습니다. 직접 복사하거나 차단하고 메시지 정보를 수정하세요.
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:
 
이렇게 하면 로그 개작을 완성할 수 있거나 로그를 직접 불러도 문제없다.
 
 
 
 
권장 읽기:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#ref-contrib-admin
                http://www.ibm.com/developerworks/cn/opensource/os-django-admin/

좋은 웹페이지 즐겨찾기