将 Django 与 html 编辑器一起使用,对文本进行编码和解码
Using Django with an html editor, econding and decoding the text
我正在使用编辑器 Quill 在 Django 中接收数据,数据格式为 HTML。
当我推入数据库时可以 encode/clean 数据,当我检索时返回 html 吗?如果是怎么办?
我也只使用段落、列表和
(这是由编辑器传递的),但我想检查用户是否没有在代码中添加任何其他内容。
例如:
我从编辑那里得到:
<li>fdsafdsafdsa</li><li>fdsafdafsdafds</li>
在数据库中我想另存为(现在我另存为html):
<li>fdsafdsa</li><li>fdsafdsa</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 元素。related answer to the snipplet above
当然,保存和服务用户生成的 html 总是很棘手并且可能很危险,因此您应该始终确保 html 不包含可能危险的东西。您可以使用 BeautifulSoup 来解析生成的 html,如果它包含段落和列表以外的任何内容,则拒绝它。
如果您想在模板中呈现用户生成的 html,您可以像这样简单地呈现它:
{{ html |safe }}
我最终决定像这样使用 Mozilla 的漂白包:
value = bleach.clean(value, tags=['p', 'ul', 'ol', 'li', 'br'])
我正在使用编辑器 Quill 在 Django 中接收数据,数据格式为 HTML。
当我推入数据库时可以 encode/clean 数据,当我检索时返回 html 吗?如果是怎么办?
我也只使用段落、列表和
(这是由编辑器传递的),但我想检查用户是否没有在代码中添加任何其他内容。
例如:
我从编辑那里得到:
<li>fdsafdsafdsa</li><li>fdsafdafsdafds</li>
在数据库中我想另存为(现在我另存为html):
<li>fdsafdsa</li><li>fdsafdsa</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 元素。related answer to the snipplet above
当然,保存和服务用户生成的 html 总是很棘手并且可能很危险,因此您应该始终确保 html 不包含可能危险的东西。您可以使用 BeautifulSoup 来解析生成的 html,如果它包含段落和列表以外的任何内容,则拒绝它。
如果您想在模板中呈现用户生成的 html,您可以像这样简单地呈现它:
{{ html |safe }}
我最终决定像这样使用 Mozilla 的漂白包:
value = bleach.clean(value, tags=['p', 'ul', 'ol', 'li', 'br'])