django - 检测哪些应用是用户创作的而不是包

时间:2018-02-24 09:42:42

标签: django logging

在我的项目中,我尝试对未作为包导入但由我的伙伴开发在项目中创建的应用程序强制执行日志记录格式(因为来自这些应用程序的日志可能包含用户敏感数据)。

为此,我创建了一个logging.Filter,用于检查LogRecord是否具有模块的名称,然后有条件地修改它。

例如,如果这是我的应用列表(部分内容):

INSTALLED_APPS = [

    # django-supplied
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',


    # third-party apps
    'webpack_loader',
    'django_tables2',
    'django_s3_storage',

    # user-created apps
    'nlp',
    'catalog',
    'broker',
]

然后过滤器会检查LogRecord.name是否以['nlp', 'catalog', 'broker']中的任何一个开头。

问题是,如何在不将其名称硬编码到过滤器中的情况下检测用户创建的应用程序?

1 个答案:

答案 0 :(得分:1)

最可靠的方法是硬编码。但是你可以在你的django设置文件中做到这一点,这个文件是明确的和可维护的。

# settings.py

CORE_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
]
THIRD_PARTY_APPS = [
    'webpack_loader',
    'django_tables2',
    'django_s3_storage',
]
USER_CREATED_APPS = [
    'nlp',
    'catalog',
    'broker',
]
INSTALLED_APPS = CORE_APPS + THIRD_PARTY_APPS + USER_CREATED_APPS

# customfilter.py
from django.conf import settings

if any(LogRecord.name.startswith(user_app_name) 
       for user_app_name in settings.USER_CREATED_APPS): 
    ...