在django模型和模板中轻松使用漂白剂
django-bleach的Python项目详细描述
Bleach是一个python模块,它接受任何html输入,并返回 只包含允许的HTML标记子集的有效的经过清理的HTML, 属性和样式。django-bleach是一个django应用程序,它使用 bleach非常简单。
设置
通过pip安装django-bleach:
pip install django-bleach
将django-bleach添加到INSTALLED_APPS:
INSTALLED_APPS = [ # ... 'django_bleach', # ... ]
为允许的标记、属性和样式选择一些合理的默认值; 以及遇到未知标记时的行为。每一个都是 可选,默认为使用bleachdefaults。见 bleach documentation:
# Which HTML tags are allowed BLEACH_ALLOWED_TAGS = ['p', 'b', 'i', 'u', 'em', 'strong', 'a'] # Which HTML attributes are allowed BLEACH_ALLOWED_ATTRIBUTES = ['href', 'title', 'style'] # Which CSS properties are allowed in 'style' attributes (assuming # style is an allowed attribute) BLEACH_ALLOWED_STYLES = [ 'font-family', 'font-weight', 'text-decoration', 'font-variant'] # Strip unknown tags if True, replace with HTML escaped characters if # False BLEACH_STRIP_TAGS = True # Strip comments, or leave them in. BLEACH_STRIP_COMMENTS = False
选择漂白剂字段的默认小部件。默认为 django.forms.Textarea,但您可能需要用 所见即所得编辑器或类似的编辑器:
# Use the CKEditorWidget for bleached HTML fields BLEACH_DEFAULT_WIDGET = 'wysiwyg.widgets.WysiwygWidget'
我在我的项目中使用django-ckeditor,但您使用什么取决于您。
用法
在您的模型中
django-bleach提供了三种创建漂白输出的方法。最简单的 包括自动清理的用户可编辑html内容的方法是 使用BleachField模型字段:
# in app/models.py from django import models from django_bleach.models import BleachField class Post(models.Model): title = models.CharField() content = BleachField() # ...
BleachField接受以下参数,以自定义 bleach。请参阅bleach documentation以了解其用途:
- allowed_tags
- allowed_attributes
- allowed_styles
- strip_tags
- strip_comments
除了特定于bleach的参数之外,BleachField模型字段 接受所有正常字段属性。在幕后,这是一个 TextField,并接受与默认值TextField相同的所有参数。
BleachFieldmodel字段使用BleachFieldform字段来执行 所有的工作。它本身不提供消毒设施。这是 被认为是一个bug,但是一个干净的解决方案还没有实现。任何拉力 请求修正这一点将被感激地应用。只要BleachField 模型字段只与BleachField表单字段一起使用,不会有 问题。如果不是这样,则无法保证经过清理的html。
以您的形式
提供了一个BleachField表单字段。此字段清除来自 用户,并向django应用程序呈现安全、干净的html。这是 大部分工作都是在那里完成的。
在模板中
如果你有某个地方的内容需要在 模板,您可以使用bleach过滤器:
{% load bleach_tags %} {{ some_unsafe_content|bleach }}
如果筛选器没有参数,则使用 应用程序设置。通过指定允许的标记,可以覆盖它们 作为过滤器的参数:
{{ some_unsafe_content|bleach:"p,span" }}
还有bleach_linkify使用漂白剂的linkify功能 它将html片段中类似url的字符串转换为链接
此函数用于转换类似URL、域名和电子邮件的字符串 文本中的地址,可以是指向链接的HTML片段,同时保留:
- 字符串中已存在链接
- 在属性中找到URL
- 电子邮件地址