5

在我的模型中,我经常使用旨在包含大量纺织品格式输入的文本字段。我想自动混淆输入到这些文本字段中的任何电子邮件地址,以便当它们在模板中打印时它们对蜘蛛不可见。

有没有聪明的方法来做到这一点?

更新:

根据下面lazerscience的回答,这是我最终使用的代码。我将文件命名为 encode_mailto.py,并将它放在一个 templatetags 目录中,在我安装到我的大多数 django 项目中的“实用程序”类型的应用程序中。

import re
import random
from django.utils.safestring import mark_safe
from django import template
register = template.Library()

email_link_pat = re.compile(r'<a\s+href=("|\')?mailto:[^>]+>[^<]*</a>')
email_pat = re.compile(r'\b[-.\w]+@[-.\w]+\.[a-z]{2,4}\b')

def get_script(m):
    code_list = []
    for c in m.group(0):
        d = ord(c)
        x = random.randint(0, d)
        code_list.append("%d+%d" % (x, d-x))

    return '<script type="text/javascript">document.write(String.fromCharCode(%s))</script>' % \
        ",".join(code_list)

def encode_mailto(text):
    text = email_link_pat.sub(get_script, text)
    text = email_pat.sub(get_script, text)
    return mark_safe(text)

register.filter('encode_mailto', encode_mailto)</pre>

然后在模板中使用它,如下所示:

{% load encode_mailto %}
{{"A bunch of text with an email address emailaddress@host.com"|encode_mailto }}
4

3 回答 3

2

是可以使用的东西。

诀窍是添加一个电子邮件混淆代码,这将使您的电子邮件地址难以使用非 js 客户端捕获。

将其添加为中间件,或者更确切地说,将其添加为可以作用于包含纺织数据的对象的简单标签。

于 2010-05-19T09:49:22.523 回答
2

如果您只想将其用作模板标签过滤器:

import re
import random
from django.utils.safestring import mark_safe


email_link_pat = re.compile(r'<a\s+href=("|\')?mailto:[^>]+>[^<]*</a>')
email_pat = re.compile(r'\b[-.\w]+@[-.\w]+\.[a-z]{2,4}\b')

def get_script(m):
    code_list = []
    for c in m.group(0):
        d = ord(c)
        x = random.randint(0, d)
        code_list.append("%d+%d" % (x, d-x))

    return '<script type="text/javascript">document.write(String.fromCharCode(%s))</script>' % \
        ",".join(code_list)

@register.filter
def encode_mailto(text):
    text = email_link_pat.sub(get_script, text)
    text = email_pat.sub(get_script, text)
    return mark_safe(text)

然后你可以在你的模板中使用它,例如:

{{ "<a href='mailto:mail@email.com'>Send Mail</a>"|encode_mailto }}
于 2010-05-19T11:26:07.423 回答
0

您可以使用django-email-obfuscator. 首先,安装它:

$ pip install django-email-obfuscator

然后,添加email_obfuscator到:INSTALLED_APPSsettings.py

INSTALLED_APPS = (
    # ...
    'email_obfuscator',
)

obfuscate在您的模板中,您可以使用过滤器保护电子邮件地址:

{% load email_obfuscator %}
{{ 'your@email.com'|obfuscate }}
于 2015-12-09T23:59:15.197 回答