如何使用Django Rest Framework在Django中进行动作记录

urD*_*DMG 3 python django logging django-admin django-rest-framework

今天是个好日子!

我需要使用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
Run Code Online (Sandbox Code Playgroud)

我该怎么办?您对类似任务有一些参考吗?

Ade*_*laN 7

大家好,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,
        },
    },
}
Run Code Online (Sandbox Code Playgroud)

接下来,在每个要记录内容的文件中,首先必须获得对记录器的引用。您可以执行以下操作:

import logging
logger = logging.getLogger(__name__)
Run Code Online (Sandbox Code Playgroud)

现在有了记录器,您可以轻松开始记录所需的任何内容。您的示例中的代码变为:

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
Run Code Online (Sandbox Code Playgroud)

但是,我有一种感觉,您希望对每个序列化器都执行此操作。如果是这种情况,请告诉我,我会继续回答。

祝好运!


Lin*_*via 0

大多数操作都列在mixins.py中