引言
在Web开发中,数据处理和清洗是必不可少的一环。Bleach是一个强大的Python库,它可以帮助我们轻松地进行HTML和XML内容的安全清洗。无论是为了防止XSS攻击还是为了确保数据的一致性,Bleach都是一个非常有用的工具。本文将带你一步步轻松上手Bleach脚本编写技巧。
什么是Bleach?
Bleach是一个用于清理HTML和XML文档的Python库。它可以去除不安全的HTML标签和属性,从而防止跨站脚本攻击(XSS)。Bleach通过定义一个安全列表,允许用户指定哪些HTML标签和属性是安全的,哪些是不安全的。
安装Bleach
在开始编写脚本之前,你需要确保已经安装了Bleach库。可以使用pip进行安装:
pip install bleach
基础使用
导入Bleach库
from bleach import Cleaner
创建Cleaner对象
在创建Cleaner对象时,你可以指定允许的标签和属性。如果不指定,Bleach将默认允许所有的HTML标签和属性。
cleaner = Cleaner(tags=['p', 'a'], attributes=['href', 'title'])
在这个例子中,我们只允许p和a标签,以及href和title属性。
清洗HTML内容
使用clean()方法清洗HTML内容。
dirty_html = '<p>Hello, <a href="http://example.com" title="Example">click here</a>!</p>'
clean_html = cleaner.clean(dirty_html)
print(clean_html)
输出结果将是:
<p>Hello, <a href="http://example.com" title="Example">click here</a>!</p>
过滤不安全的标签和属性
Bleach会自动过滤掉不安全的标签和属性。例如,以下HTML内容将不会包含<script>标签:
dirty_html = '<p>Hello, <script>alert("XSS")</script>!</p>'
clean_html = cleaner.clean(dirty_html)
print(clean_html)
输出结果将是:
<p>Hello, !</p>
高级技巧
自定义过滤函数
Bleach允许你自定义过滤函数,以便在清洗过程中进行更复杂的处理。
def custom_filter(tag, name, value):
if tag == 'a' and name == 'href':
# 处理href属性
pass
return False # 返回False表示不保留此标签或属性
cleaner = Cleaner(tags=['p', 'a'], attributes=['href', 'title'], custom_filters=[custom_filter])
清洗HTML实体
Bleach默认会清洗HTML实体。如果你需要保留某些实体,可以禁用这一功能。
”`python cleaner = Cleaner(tags=[‘p’, ‘a’], attributes=[‘href’, ‘title’], strip=True, remove_tags=False, remove_attrs=False, remove_nbsp=False, remove_scripts=False, remove_style=False, remove_comments=False, remove_event_handlers=False, strip=True, clean=True, tags_allowlist=None, attributes_allowlist=None, protocols_allowlist=None, safe_attrs_only=False, remove_unknown_tags=False, remove_banned_protocols=False, remove_banned_protocols=False, custom_filters=None, tag_pattern=None, attr_pattern=None, char_pattern=None, tag_re=None, attr_re=None, char_re=None, is_allowed_tag=None, is_allowed_attr=None, is_allowed_char=None, is_allowed_tag_pattern=None, is_allowed_attr_pattern=None, is_allowed_char_pattern=None, is_allowed_tag_re=None, is_allowed_attr_re=None, is_allowed_char_re=None, is_allowed_tag_custom_filter=None, is_allowed_attr_custom_filter=None, is_allowed_char_custom_filter=None, is_allowed_tag_is_allowed=None, is_allowed_attr_is_allowed=None, is_allowed_char_is_allowed=None, is_allowed_tag_is_allowed_pattern=None, is_allowed_attr_is_allowed_pattern=None, is_allowed_char_is_allowed_pattern=None, is_allowed_tag_is_allowed_re=None, is_allowed_attr_is_allowed_re=None, is_allowed_char_is_allowed_re=None, is_allowed_tag_is_allowed_custom_filter=None, is_allowed_attr_is_allowed_custom_filter=None, is_allowed_char_is_allowed_custom_filter=None, is_allowed_tag_is_allowed_is_allowed=None, is_allowed_attr_is_allowed_is_allowed=None, is_allowed_char_is_allowed_is_allowed=None, is_allowed_tag_is_allowed_is_allowed_pattern=None, is_allowed_attr_is_allowed_is_allowed_pattern=None, is_allowed_char_is_allowed_is_allowed_pattern=None, is_allowed_tag_is_allowed_is_allowed_re=None, is_allowed_attr_is_allowed_is_allowed_re=None, is_allowed_char_is_allowed_is_allowed_re=None, is_allowed_tag_is_allowed_is_allowed_custom_filter=None, is_allowed_attr_is_allowed_is_allowed_custom_filter=None, is_allowed_char_is_allowed_is_allowed_custom_filter=None, is_allowed_tag_is_allowed_is_allowed_is_allowed=None, is_allowed_attr_is_allowed_is_allowed_is_allowed=None, is_allowed_char_is_allowed_is_allowed_is_allowed=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_char_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_re=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_re=None, is_allowed_char_is_allowed_is_allowed_is_allowed_re=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_char_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_re=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_custom_filter=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_char_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed=None, is_allowed_tag_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_pattern=None, is_allowed_attr_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is_allowed_is
