跳转到主要内容

未提供项目描述

项目描述

Django Birdbath

一个简单工具,用于清洗Django数据库数据。匿名化用户数据,删除开发环境中不需要的内容,或者完成你需要进行的任何操作。

用法

  1. birdbath 添加到你的 INSTALLED_APPS
  2. 在设置文件中适当设置 BIRDBATH_CHECKSBIRDBATH_PROCESSORS(见下文配置)。
  3. 运行 ./manage.py run_birdbath 触发处理器。

重要!默认处理器是破坏性的,将会匿名化用户邮箱和密码。请勿在生产环境中运行!

默认情况下,Birdbath启用了一个 Django系统检查,如果当前环境未触发Birdbath清理,则将触发错误。

这是为了让开发者在运行如 runserver 等命令之前,提示他们需要匿名化/清理数据。

建议在生产环境中使用环境变量将 BIRDBATH_REQUIRED 设置为 False

可以使用 run_birdbath--skip-checks 标志或通过在Django设置中设置 BIRDBATH_SKIP_CHECKS = True 跳过检查。

配置

常见设置

  • BIRDBATH_REQUIRED(默认:True)- 如果为True,则如果未执行匿名化,Django系统检查将抛出错误。在生产环境中设置为False
  • BIRDBATH_CHECKS - 要在处理器之前执行的'检查'类路径的列表。如果这些中的任何一个返回False,则处理器将拒绝运行。
  • BIRDBATH_PROCESSORS - 要执行以清理数据的 'Processor' 类的路径列表。

处理器特定设置

  • BIRDBATH_USER_ANONYMISER_EXCLUDE_EMAIL_RE(默认:example\.com$)- 一个正则表达式模式,用于在匿名化时排除匹配特定电子邮件地址的用户。
  • BIRDBATH_USER_ANONYMISER_EXCLUDE_SUPERUSERS(默认:True)- 如果为 True,则将 is_superuser 设置为 True 的用户将排除在匿名化之外。

实现自己的

您的站点可能有一些自己的检查/处理器需求。

检查

可以通过继承 birdbath.checks.BaseCheck 并实现 check 方法来创建自定义检查。

from birdbath.checks import BaseCheck


class IsDirtyCheck(BaseCheck):
    def check(self):
        return os.environ.get("IS_DIRTY")

check 方法应返回 True 以继续检查,或返回 False 以停止检查并防止处理器运行。

处理器

可以通过继承 birdbath.processors.BaseProcessor 并实现 run 方法来创建自定义处理器。

from birdbath.processors import BaseProcessor


class DeleteAllMyUsersProcessor(BaseProcessor):
    def run(self):
        User.objects.all().delete()

birdbath.processors 中还有更多专门的基础类,可以帮助您编写更干净的自定义处理器。例如,上面的示例可以使用 BaseModelDeleter 类来编写。

from birdbath.processors import BaseModelDeleter


class DeleteAllMyUsersProcessor(BaseModelDeleter):
    model = User

如果您只需要删除用户子集,可以像这样重写 get_queryset() 方法。

from birdbath.processors import BaseModelDeleter


class DeleteNonStaffUsersProcessor(BaseModelDeleter):
    model = User

    def get_queryset(self):
        return super().get_queryset().filter(is_staff=False)

如果您想要“匿名化”而不是删除对象,您可能会发现 BaseModelAnonymiser 类很有用。您只需指出应该“匿名化”或“清除”的字段,类就会完成剩余的工作。例如:

from birdbath.processors import BaseModelAnonymiser


class UserAnonymiser(BaseModelAnonymiser):
    model = User

    # generate random replacement values for these fields
    anoymise_fields = ["first_name", "last_name", "email", "password"]


class CustomerProfileAnonymiser(BaseModelAnonymiser):
    model = CustomerProfile

    # generate random replacement values for these fields
    anoymise_fields = ["date_of_birth"]

    # set these fields to ``None`` (if supported), or a blank string
    clear_fields = ["email_consent", "sms_consent", "phone_consent", "organisation"]

该类将生成

  • 使用 django.db.models.EmailField 的字段的合法但不存在电子邮件地址。
  • 任何具有 choices 在字段级别定义的字段的选择随机值。
  • 使用 django.db.models.DateFielddjango.db.models.DateTimeField 的字段的过去日期。
  • 使用 django.db.models.IntegerField(或其子类)、django.db.models.FloatFielddjango.db.models.DecimalField 的字段的随机数字。
  • 具有以下名称之一(“first_name”、“forename”、“given_name”、“middle_name”)的字段的真实-looking 的第一个名字。
  • 具有以下名称之一(“last_name”、“surname”、“family_name”)的字段的真实-looking 的最后一个名字。
  • 使用 django.db.models.CharFielddjango.db.models.TextField 或这些的子类的任何其他字段的随机字符串。

如果您有具有自定义验证要求的字段,或者只想生成更真实的替换值,您可以在子类中添加 'generate' 方法来实现这一点。BaseModelAnonymiser 将在匿名化字段值时自动查找格式为 "generate_{field_name}" 的方法。例如,以下处理器将为 "account_holder" 和 "account_number" 字段生成随机值。

from birdbath.processors import BaseModelAnonymiser


class DirectDebitDeclarationAnonymiser(BaseModelAnonymiser):

    model = DirectDebitDeclaration
    anonymise_fields = ["account_holder", "account_number"]

    def generate_account_holder(self, field, obj):
        # Return a value to replace 'account_holder' field values
        # `field` is the field instance from the model
        # `obj` is the model instance being updated
        return self.faker.name()

    def generate_account_number(self, field, obj):
        # Return a value to replace 'account_number' field values
        # `field` is the field instance from the model
        # `obj` is the model instance being updated
        return self.faker.iban()

检查/处理器参考

检查

  • checks.contrib.heroku.HerokuNotProductionCheck - 如果 HEROKU_APP_NAME 环境变量未设置,或如果已设置且包含单词 production,则失败。
  • checks.contrib.heroku.HerokuAnonymisationAllowedCheck - 如果 ALLOWS_ANONYMISATION 环境变量与应用程序名称不匹配,则失败。

处理器

  • processors.users.UserEmailAnonymiser - 将用户电子邮件地址替换为随机地址
  • processors.users.UserPasswordAnonymiser - 将用户密码替换为随机 UUID
  • processors.contrib.wagtail.SearchQueryCleaner - 删除完整的搜索查询历史
  • processors.contrib.wagtail.FormSubmissionCleaner - 删除所有表单提交

项目详情


下载文件

下载适用于您平台文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。

源分发

django-birdbath-2.0.0.tar.gz (11.9 kB 查看哈希值)

上传时间: 源代码

构建发行版

django_birdbath-2.0.0-py3-none-any.whl (12.1 kB 查看哈希值)

上传时间: Python 3

支持