如何使用 Django Rest Framework 在 Django 中进行操作日志记录

Posted

技术标签:

【中文标题】如何使用 Django Rest Framework 在 Django 中进行操作日志记录【英文标题】:How to make action logging in Django with Django Rest Framework 【发布时间】:2017-05-24 05:29:27 【问题描述】:

大家好!

我需要使用 Django Rest Framework 记录 Django 1.10.4 中的操作并将它们保存在文件中。

我有不同的序列化程序和函数。我已阅读文档,但不太了解我必须做什么才能使用我发送的数据记录 CREATE、UPDATE 或 DELETE 等操作

例如我有:

class MySerializer(serializers.HyperlinkedModelSerializer):
    def create(self, validated_data):
        ...some code...
        return object

    def update(self, instance, validated_data):
        ...some code...
        return instance

我该怎么做?你有类似任务的参考吗?

【问题讨论】:

【参考方案1】:

大部分操作都列在mixins.py

【讨论】:

【参考方案2】:

大家好,***er!

让我们一步一步来。

首先,您需要声明一个Django logger。这基本上是一种具有一些额外功能的文件处理程序(在您的情况下,因为您想写入文件)。

最简单的记录器可以是(在您的settings.py 中):

LOGGING = 
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': 
        'file': 
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/path/to/django/debug.log',
        ,
    ,
    'loggers': 
        'django': 
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        ,
    ,

接下来,在您想要记录某些内容的每个文件中,您首先必须获得对记录器的引用。你可以这样做:

import logging
logger = logging.getLogger(__name__)

现在您有了记录器,您可以简单地开始记录您想要的任何内容。您示例中的代码变为:

class MySerializer(serializers.HyperlinkedModelSerializer):
    def create(self, validated_data):
        ...some code...
        logger.info('Information incoming!')
        return object

    def update(self, instance, validated_data):
        ...some code...
        logger.error('Something went wrong!')
        return instance

然而,我感觉您希望为您拥有的每个 序列化程序完成此操作。如果是这种情况,请告诉我,我会扩展我的答案。

祝你好运!

【讨论】:

哦,非常感谢!!!您的回答是最好的,并且以我所看到的清​​晰摘要的形式出现!现在我终于明白了 =) 我还发现了几个包,例如django-simple-history.readthedocs.io/en/latest/index.html,但它不适用于 1.10 Django。此外,您的感觉是绝对正确的,其想法是为每个序列化程序进行日志记录。如果这个案子有更好的解决方案,我会很高兴的! 很高兴听到这个消息。如果您是初学者,我强烈建议您使用软件包,因为它们通常稳定且经过良好测试。在这里,您可以比较用于历史/审计的多个包:djangopackages.org/grids/g/model-audit。我相信您会发现其中一些与 Django 1.10 兼容。但是您必须记住,这些仅在 Django 上工作,并且没有利用 DRF 的存在(意味着日志记录是在模型上完成的,而不是在序列化器/视图上)。为了扩展我的答案,我还需要查看一些视图(应该是日志记录的位置)。谢谢 @AdelaN 如何创建或更新实例,以便记录"Object %s created" % unicode(instance)之类的内容? @Don,基本上在您的create 方法中,您应该调用super,这将为您提供创建/更新的实例。你在哪里做这取决于你的逻辑。

以上是关于如何使用 Django Rest Framework 在 Django 中进行操作日志记录的主要内容,如果未能解决你的问题,请参考以下文章

django.test.client 上的 Django rest 框架导入错误

无法使用 Django Rest 框架发送压缩的 gzip 数据

Django 和 Django 休息框架

Django前后端分离——drf

Django REST to React - 无需密码即可获取社交身份验证令牌

尽管有 AllowAny 权限,django-rest-framework 在 POST、PUT、DELETE 上返回 403 响应