Использование Django с редактором HTML, расшифровка и расшифровка текста - PullRequest
0 голосов
/ 01 февраля 2019

Я получаю данные в 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>

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Я, наконец, решил использовать отбеливатель в форме Mozilla:

value = bleach.clean(value, tags=['p', 'ul', 'ol', 'li', 'br'])
0 голосов
/ 01 февраля 2019

Вы можете сохранить 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 }}
...