跳转到主要内容

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 (17.3 kB 查看哈希)

上传时间:

构建分发

leukeleu_django_gdpr-1.5.1-py3-none-any.whl (11.5 kB 查看哈希值)

上传时间: Python 3

由以下提供支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面