首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django-TinyMCE验证规则

Django-TinyMCE验证规则
EN

Stack Overflow用户
提问于 2014-06-22 21:16:28
回答 2查看 230关注 0票数 0

我在我的Django管理站点中使用TinyMCE。我需要验证没有不允许的HTML标记被提交。这就是我试过的:

1)验证方法

代码语言:javascript
复制
    def check_for_invalid_html_tags(value) :
        compiled_regex = re.compile('<(?!/?(p|div|ul|li)(>|\s))[^<]+?>')

        if compiled_regex.match(value):
            raise ValidationError('Invalid Tags')

2)验证规则

代码语言:javascript
复制
    content = tinymce_models.HTMLField(validators=[check_for_invalid_html_tags])

这似乎不起作用,因为任何提交都是有效的。当我将tinymce_models.HTMLField更改为models.TextField时,规则工作得很好。因此,我认为这个问题是TinyMCE的结果。

有人能帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-25 20:49:12

我读了文档,matchsearch之间有一个细微的区别

比赛:

如果字符串开头有零个或多个字符.

搜寻:

扫描字符串寻找第一个位置..。

search()与match()

由于您要查找的内容可能在字符串中无处不在,所以您需要使用search而不是match。另外一点,您可能需要设置fagre.s或re.DOTALL,因为您的输入中可能有换行符。

做“.”特殊字符匹配任何字符,包括换行符;没有此标志,“。将匹配除了换行符以外的任何东西。

这是函子和工作解中的check_for_invalid_html_tags。

代码语言:javascript
复制
import re

class CheckForInvalidHtmlTags(object):
    compiled_regex = re.compile('<(?!/?(p|div|ul|li)(>|\s))[^<]+?>')

    def __call__(self, value):
        if self.compiled_regex.search(value):
            print 'error'
        else:
            print 'ok'

c = CheckForInvalidHtmlTags()
c('test test <a>test<a> test') # print error
c('test <p> test</p>') # print ok
c('test<a> test</a><p>test</p>test') # print error
票数 1
EN

Stack Overflow用户

发布于 2014-06-24 18:32:46

您的验证方法实际上必须是一个验证器,它具有像__call__这样的特殊方法。使用django的核心验证器之一,比如regex验证器。

代码语言:javascript
复制
from django.core.validators import RegexValidator

check_for_invalid_html_tags = RegexValidator(
        regex=''<(?!/?(p|div|ul|li)(>|\s))[^<]+?>'',
        message='Invalid Tags',
        code='invalid_content'
    )

然后在你的模型中:

代码语言:javascript
复制
content = tinymce_models.HTMLField(validators=[check_for_invalid_html_tags])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24355811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档