我有一个带有描述字段的模型,出于安全原因,我想创建一个自定义字段来清除此代码,然后再保存到数据库。
我尝试使用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 ''
答案 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?"。