【问题标题】:How to make action logging in Django with Django Rest Framework如何使用 Django Rest Framework 在 Django 中进行操作日志记录
【发布时间】: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

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

【问题讨论】:

    标签: python django logging django-admin django-rest-framework


    【解决方案1】:

    大部分操作都列在mixins.py

    【讨论】:

      【解决方案2】:

      大家好,Stackoverflower!

      让我们一步一步来。

      首先,您需要声明一个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,这将为您提供创建/更新的实例。你在哪里做这取决于你的逻辑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 2010-12-23
      • 2015-12-14
      • 1970-01-01
      相关资源
      最近更新 更多