Использование Django с редактором HTML, расшифровка и расшифровка текста

Я получаю данные в Django, используя редактор Quill, данные в формате 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>

1 ответ

Вы можете сохранить HTML в вашей базе данных в текстовом поле.

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

Затем перед сохранением этих данных убедитесь, что они действительно являются действительными html. Вы можете сделать это с помощью html-парсера, например BeautifulSoup:

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'])
Другие вопросы по тегам