在django模型和模板中轻松使用漂白剂

django-bleach的Python项目详细描述


https://travis-ci.org/marksweb/django-bleach.svg?branch=masterLatest Versionhttps://codecov.io/gh/marksweb/django-bleach/branch/master/graph/badge.svgCodacy BadgeDownloadsLicense

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. 为允许的标记、属性和样式选择一些合理的默认值; 以及遇到未知标记时的行为。每一个都是 可选,默认为使用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
    
  4. 选择漂白剂字段的默认小部件。默认为 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片段,同时保留:

  1. 字符串中已存在链接
  2. 在属性中找到URL
  3. 电子邮件地址

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
空字符串检查在java中未按预期工作   JavaSpringWebClient:自动计算主体的HMAC签名并将其作为头传递   foreach是否有一个Java等效的foreach循环和一个引用变量?   java如何在Eclipse中导入jar   使用特定第三方或java时lombok触发错误。*方法或构造函数   安卓 java将对象数组转换为int数组   java使一定百分比的JUnit测试通过   java Android:将Seekbar的一个值与另一个值进行比较   java将int数组(图像数据)写入文件的最佳方式是什么   java取代了系统。yml的构造函数内的getProperty   sqlite Java将公钥和私钥转换为字符串,然后再转换回字符串   安卓获取白色像素并将其保存到java opencv中的数组中   java为什么是ServerSocket。setSocketFactory静态?   Java数组似乎在不直接修改的情况下更改值