Использование Django с редактором HTML, расшифровка и расшифровка текста
Я получаю данные в Django, используя редактор Quill, данные в формате HTML.
Можно закодировать / очистить данные, когда я нажимаю на базу данных, и когда я получаю, чтобы вернуться в HTML? Если да, то как?
Также я использую только абзац, списки и
(это передается редактором), но я хочу проверить, не добавляет ли пользователь ничего в коде.
Например:
Я получаю от редактора:
<li>fdsafdsafdsa</li><li>fdsafdafsdafds</li>
В базе данных я хочу сохранить как (теперь я сохраняю как HTML):
<li>fdsafdsa</li><li>fdsafdsa</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'])