将 Django 与 html 编辑器一起使用,对文本进行解码和解码



我正在使用编辑器Quill在Django中接收数据,数据格式化为HTML。

当我推送数据库时,以及当我检索到html中时,可以对数据进行编码/清理?如果是,如何?

我也只使用段落,列表和
(这是由编辑器传递的),但我想检查用户是否没有在代码中添加任何其他内容。

例如:

我从编辑那里得到:

<li>fdsafdsafdsa</li><li>fdsafdafsdafds</li>

在我想另存为的数据库中(现在我另存为 html):

&lt;li&gt;fdsafdsa&lt;/li&gt;&lt;li&gt;fdsafdsa&lt;/li

当我推回页面时,我会发回:

<li>fdsafdsafdsa</li><li>fdsafdafsdafds</li>

您可以将数据库中的 html 保存在文本字段中。

class UserGeneratedHtml(models.Model)
    html = models.TextField()

然后在保存此数据之前,请确保它实际上是有效的 html。你可以使用像BeautifulSoup这样的html解析器来做到这一点:

from bs4 import BeautifulSoup
html = """<html>
<head><title>I'm title</title></head>
</html>"""
non_html = "This is not an html"
bool(BeautifulSoup(html, "html.parser").find())
True
bool(BeautifulSoup(non_html, "html.parser").find())
False

此代码截图检查字符串中是否有任何 html 元素。与上面的截图相关的答案

当然,保存和服务用户生成的html总是很棘手的,而且可能很危险,所以你应该始终确保html不包含可能危险的东西。您可以使用BeautifulSoup来解析生成的html,如果它包含段落和列表以外的任何内容,则拒绝它。

如果要在模板中呈现用户生成的html,可以像这样简单地呈现它:

{{ html |safe }}

我最终决定像这样使用Mozilla的漂白剂包:

value = bleach.clean(value, tags=['p', 'ul', 'ol', 'li', 'br'])

相关内容

  • 没有找到相关文章

最新更新