如何使用 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 REST to React - 无需密码即可获取社交身份验证令牌
尽管有 AllowAny 权限,django-rest-framework 在 POST、PUT、DELETE 上返回 403 响应