我如何在 Django 中将自定义字段设置为 "clean" 和 html 字段?

How do i do a custom field in django to "clean" an html field?

我有一个带有描述字段的模型,这个字段可以是 html 代码,出于安全原因,我想创建一个自定义字段以在保存到数据库之前清除此代码。

我尝试使用 lib 漂白剂 https://github.com/mozilla/bleach,但我不知道我是否做对了

这是我的自定义字段

class HtmlField(models.TextField):
    description = 'Clean HTML field'

    def __init__(self, *args, **kwargs):
        bleach.clean(self.description)
        super().__init__(*args, **kwargs)

编辑:

我可以按我想要的方式保存数据,但我重新考虑这个错误不迁移:类型错误:参数不能是'NoneType'类型,必须是文本类型

EDIT2:我通过检查文本是否为空解决了之前的问题:

if not value:
             return ''

https://github.com/mozilla/bleach/issues/334

您可以覆盖 to_python 函数,例如:

class HtmlField(models.TextField):
    description = 'Clean HTML field'

    def <b>to_python</b>(self, value):
        value = super().to_python(value)
        if value is None:
            return None
        return bleach.clean(value)

话虽这么说,但我不认为在数据库中存储 HTML 代码会带来安全风险。数据库不呈现 html,不呈现 运行 JavaScript 部分等。有关详细信息,请参阅 the question "Database for Content - OK to store HTML?"