跳转到主要内容

轻松使用bleach与Django模型和模板

项目描述

Documentation Status Latest Version License Downloads

https://codecov.io/gh/marksweb/django-bleach/branch/master/graph/badge.svg Codacy Badge pre-commit.ci status Language grade: Python Total alerts

Bleach 是一个Python模块,它接受任何HTML输入,并返回有效、清理过的HTML,其中只包含允许的HTML标签、属性和样式的子集。 django-bleach 是一个Django应用程序,使得使用 bleach 变得非常简单。

在此处阅读文档.

安装

  1. 通过 pip 安装 django-bleach

    pip install django-bleach
  2. django-bleach 添加到您的 INSTALLED_APPS

    INSTALLED_APPS = [
        # ...
        'django_bleach',
        # ...
    ]
  3. 为允许的标签、属性和样式选择一些合理的默认值;以及遇到未知标签时的行为。这些都是可选的,默认使用 bleach 的默认值。请参阅 bleach 文档

    # 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
  4. 为 bleach 字段选择默认的小部件。这默认为 django.forms.Textarea,但您可能希望将其替换为 WYSIWYG 编辑器或其他类似工具

    # 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 文档

  • allowed_tags

  • allowed_attributes

  • strip_tags

  • strip_comments

  • css_sanitizer

以下参数将在不久的将来被弃用

  • allowed_styles

除了 bleach 特定的参数外,BleachField 模型字段还接受所有正常的字段属性。在幕后,它是一个 TextField,接受与默认 TextField 相同的参数。

BleachField 模型字段在将值保存到数据库之前对其进行清理,并将其标记为安全,以便可以在模板中立即渲染,而无需进一步干预。

在模型表单中,默认情况下,BleachField 模型字段由 BleachField 表单字段表示。

在您的表单中

提供了一个 BleachField 表单字段。此字段清洗来自用户的 HTML 输入,并将安全、干净的 HTML 提供给您的 Django 应用程序,返回的值被标记为安全,可以直接在模板中渲染。

在您的模板中

如果您需要在模板中打印某处的内容,可以使用 bleach 过滤器

{% load bleach_tags %}

{{ some_unsafe_content|bleach }}

如果过滤器没有参数,则使用您应用程序设置中定义的默认设置。您可以通过指定它们作为过滤器的参数来覆盖允许的标签

{{ some_unsafe_content|bleach:"p,span" }}

还有一个 bleach_linkify,它使用 linkify 函数将 bleach 转换为链接

此函数将文本中看起来像 URL、域名和电子邮件地址的字符串转换为链接,同时保留

  1. 字符串中的现有链接

  2. 属性中的 URL

  3. 电子邮件地址

支持