leukeleu-django-gdpr是一个基于项目模型的生成GDPR文档的工具。
项目描述
leukeleu-django-gdpr
安装
pip install leukeleu-django-gdpr
添加到INSTALLED_APPS
INSTALLED_APPS = [
# ...
'leukeleu_django_gdpr',
# ...
]
配置
默认情况下,gdpr
管理命令会将gdpr.yml
写入settings.BASE_DIR
。
要更改输出目录(不更改settings.BASE_DIR
),请将DJANGO_GDPR_YML_DIR
添加到您的设置中
DJANGO_GDPR_YML_DIR = os.path.join(BASE_DIR, 'docs')
使用方法
在第一次运行时,leukeleu-django-gdpr将生成一个包含models
列表的gdpr.yml
文件。这是项目中模型的列表,每个模型包含一个字段列表。
./manage.py gdpr
在项目根目录中创建了一个名为gdpr.yml
的文件。它应该添加到版本控制中。模型列表中的每个模型具有以下结构
models:
auth.User:
name: User
fields:
username:
name: Username
description: String (up to %(max_length)s)
help_text: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
only.
required: true
pii: null
first_name:
name: First Name
description: String (up to %(max_length)s)
help_text: ''
required: false
pii: null
Leukeleu-django-gdpr会将所有字段的pii: null
添加。目标是将所有这些null
值替换为正确的布尔值;如果字段代表PII数据,则使用pii: true
,否则使用pii: false
。
再次运行时,leukeleu-django-gdpr将保留这些值,让您逐步消除所有pii: null
。
leukeleu-django-gdpr在运行时输出pii:
值的计数。
./manage.py gdpr
Checking...
No PII set 48
PII True 1
PII False 0
使用--check
运行,如果'未设置PII' > 0(yaml文件仍将生成/更新),则命令将以退出代码1退出。
您可以通过使用--dry-run
标志来防止leukeleu-django-gdpr写入(回)yaml文件。
排除/包含
要完全排除应用程序、模型或字段,请将它们列在yaml文件中的exclude:
列表中。列表中的每个项都是一个正则表达式,应匹配以下格式中对象的字符串表示:
- 对于应用程序:应用程序的
label
,例如auth
。 - 对于模型:模型的label,例如
auth.Permission
- 对于字段:模型的label后跟
.
后跟字段名,例如auth.User.username
。
请注意,列表中的项被视为正则表达式,应完全匹配对象的字符串表示。
默认排除
默认情况下,leukeleu-django-gdpr会排除以下类型的字段
- AutoField
- UUIDField
- BooleanField
- RelatedField
以及以下应用程序
- django.contrib.admin
- django.contrib.contenttypes
如果您仍然希望包含通过这种方式排除的字段/模型,您可以在yaml文件中的include:
列表中添加一个项
include:
- clients\.Client\.external_epd_uuid
- accounts\.Profile\.is_pregnant
- admin\.LogEntry
代理模型始终被排除。它们与它们代理的模型相同,因此包含它们没有好处。
匿名化数据
Leukeleu-django-gdpr附带一个anonymize
管理命令,该命令将数据库中的所有PII字段匿名化。
它仅适用于开发。它需要一个额外的依赖项和设置DEBUG = True
。
pip install leukeleu-django-gdpr[anonymize]
./manage.py anonymize
该命令使用gdpr.yaml
文件来匿名化数据库中标记为PII的所有字段。
要更改配置,您可以创建一个BaseAnonymizer
的子类。
# some_file.py
fake = Faker(["nl-NL"])
class Anonymizer(BaseAnonymizer):
# Exclude rows
# Default: superusers and staff users are excluded
extra_qs_overrides = {
"app.Model": Model._base_manager.exclude(some_field=...),
...
}
# Specify fake data for a field
# Default: user's first_name and last_name are filled with random first/last names
extra_field_overrides = {
"app.Model.some_field": fake.word,
"app.Model.some_other_field": lambda: "same value for every cell",
...
}
# Specify the fake data used for a field type
# Use for custom fields or to overwrite defaults
# Default: django builtin fields have "sensible" defaults
extra_fieldtype_overrides = {
"CustomPhoneNumberField": fake.phone_number,
# Also specify a unique variant (append with ".unique")
"CustomPhoneNumberField.unique": fake.unique.phone_number,
...
}
# Exclude fields
# Default: no fields are excluded
excluded_fields = [
"app.SomeModel.some_field",
...
]
然后将此设置添加到您的设置文件中
DJANGO_GDPR_ANONYMIZER_CLASS = "location.to.custom.Anonymizer"
检查
Leukeleu-django-gdpr向check
命令添加了gdpr.I001
检查。如果yaml文件中存在任何pii: null
值,则此检查将失败。要运行检查,请运行
./manage.py check
CI/CD
运行check
命令,如果存在未分类的字段(如果有人向模型添加了字段但忘记在gdpr.yml
中对其进行分类),则(计划中的)CI/CD任务将失败。
项目详情
下载文件
下载适用于您的平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
leukeleu-django-gdpr-1.5.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 010e42274bf872ad03cdc30696c19b7af6b1e1fc07bfa0a2c336458c1a867857 |
|
MD5 | f01f0371148ea31249f6edda3499683b |
|
BLAKE2b-256 | 3d600615e7b3b12e1b61c636caa452937d8a9d43f4fe5d7b613d8a42761f6726 |
leukeleu_django_gdpr-1.5.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | aae722a59e94e8d349822e07763d5c73841c4724a3febae7b71620a7228ad138 |
|
MD5 | 1cdfd7446851c55385feec643915017d |
|
BLAKE2b-256 | b1f6c36bf7dd97b0825d02a9a6380bde322a4039fafe6798005152ee6567da10 |