2017-01-09 55 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