在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第三方库


热门话题
Android中Axis2 web服务的java解析响应   java读取Dockerfile命令时遇到问题:是否可以将cd刻录到jar文件中?那么tarcf是做什么的呢?   java如何防止gcmTaskService periodicTask在上一个任务尚未完成时再次运行?   jquery希望使用Java生成自动登录程序   在Hibernate中检索用BigInteger映射的属性时出现java问题   与错误用户连接时发生java错误   java Hibernate+c3p0池+ehcache失败启动   JAVAlang.ClassNotFoundException:org。mysql。JDBC无法解决,添加了mysql连接器   java如何在其键包含JSTL中的点时访问映射值?   packageprivate类中的Java方法可访问性?   java如何将文件转换为StorageObject(谷歌API)   java apache commons httpclient 4.23表单登录问题不同请求中使用的不同会话cookie   所有组件的java一个侦听器instance或每个组件的一个实例   重新启动应用程序后,不会保存ListView中的java更新   java如何修复libgdx中的屏幕无渲染   java在使用mongotemplate时遇到ClassNotFound异常