2017-01-09 72 views
0

好日子大家!如何使行动记录在Django Django的REST框架

我需要Django的REST框架在Django 1.10.4行动的记录,并将它们保存在一个文件中。

我对他们有不同的序列化和功能。我读过的文档和不太明白我有什么才能登录,如创建,更新或删除数据的操作要做到这一点我送

比如我有:

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

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

我该怎么做,你有一些类似的任务参考?

回答

1

美好的一天,老乡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 

然而,我要这个感觉做每个串行你。如果是这样的话,让我知道,我会延长我的答案。

祝你好运!

+0

哦,非常感谢你!你的回答是最好的,并以我所见过的清晰的总结形式!现在我终于明白了=)我还发现了几个软件包,例如http://django-simple-history.readthedocs.io/en/latest/index.html,但它不适用于1.10 Django。此外,你的感觉是绝对正确的,这个想法是为每个序列化程序进行日志记录。如果有更好的解决方案,我会很高兴,如果你会给它! – urDMG

+0

很高兴听到这个消息。如果你是初学者,我强烈建议使用一个软件包,因为它们通常是稳定的并且经过很好的测试。在这里,您可以比较多个用于历史记录/审计的软件包:https://djangopackages.org/grids/g/model-audit/。我相信你会发现它们中的一些与Django 1.10兼容。但是你必须记住,这些只在Django上工作,并没有利用DRF的存在(这意味着日志记录是在模型上完成的,而不是在序列化器/视图上完成的)。为了扩展我的答案,我还需要查看一些视图(这是日志应该在的地方)。 Thx – AdelaN

+0

@AdelaN如何获得创建或更新的实例,所以要记录类似''Object%s创建的“%unicode(instance)'? – Don