未提供项目描述
项目描述
Django Birdbath
一个简单工具,用于清洗Django数据库数据。匿名化用户数据,删除开发环境中不需要的内容,或者完成你需要进行的任何操作。
用法
- 将
birdbath
添加到你的INSTALLED_APPS
- 在设置文件中适当设置
BIRDBATH_CHECKS
和BIRDBATH_PROCESSORS
(见下文配置)。 - 运行
./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.DateField
或django.db.models.DateTimeField
的字段的过去日期。 - 使用
django.db.models.IntegerField
(或其子类)、django.db.models.FloatField
或django.db.models.DecimalField
的字段的随机数字。 - 具有以下名称之一(“first_name”、“forename”、“given_name”、“middle_name”)的字段的真实-looking 的第一个名字。
- 具有以下名称之一(“last_name”、“surname”、“family_name”)的字段的真实-looking 的最后一个名字。
- 使用
django.db.models.CharField
、django.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
- 将用户密码替换为随机 UUIDprocessors.contrib.wagtail.SearchQueryCleaner
- 删除完整的搜索查询历史processors.contrib.wagtail.FormSubmissionCleaner
- 删除所有表单提交
项目详情
下载文件
下载适用于您平台文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。
源分发
构建发行版
django-birdbath-2.0.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fac07133976cba844e46497589f21b1f52cf09021b086a820334b304433db0fa |
|
MD5 | 5465fb98e3384047efca04df3139e438 |
|
BLAKE2b-256 | fc9c6ecd802c16f3742f41b1bd9121b9f1af7968d1a2d729c65e22ed145d9e6e |
django_birdbath-2.0.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 76826f137bcd12c15b942157ea368531391c0015d28f476e70bda1a75e26bf7c |
|
MD5 | fe115348563fb275329fa0e39c640786 |
|
BLAKE2b-256 | 3127cebac24a8aec326fa89707254d29b0b5b7a0445160e12bbccc04f57cb5bf |