如何在Django中自定义字段以“清理” HTML字段?

时间:2019-08-14 14:24:46

标签: html django-rest-framework sanitization

我有一个带有描述字段的模型,出于安全原因,我想创建一个自定义字段来清除此代码,然后再保存到数据库。

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

这是我的customField

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

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

编辑:

我可以按照自己想要的方式保存数据,但我避免了此错误不会迁移:TypeError:参数不能为'NoneType'类型,必须为文本类型

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

if not value:
             return ''

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

1 个答案:

答案 0 :(得分:0)

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

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

    def to_python(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?"