我如何在 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 ''
您可以覆盖 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?"。
我有一个带有描述字段的模型,这个字段可以是 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 ''
您可以覆盖 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?"。