Как я могу запутать адреса электронной почты, содержащиеся в текстовых полях «свободный ввод» в Django - PullRequest
5 голосов
/ 19 мая 2010

В моих моделях я часто использую текстовые поля, которые должны содержать большие фрагменты текстового ввода. Я хотел бы автоматически скрыть все адреса электронной почты, введенные в эти текстовые поля, чтобы при печати в шаблоне они не были видны паукам.

Есть ли умный способ сделать это?

Обновление:

Основываясь на ответе 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>')
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 'document.write(String.fromCharCode(%s))' % \
        ",".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)

Затем используйте его в шаблонах следующим образом:

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

Ответы [ 3 ]

3 голосов
/ 19 мая 2010

Если вы просто хотите использовать его в качестве фильтра тегов шаблона:

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 }}
2 голосов
/ 19 мая 2010

Здесь можно использовать.

Хитрость заключается в том, чтобы добавить код обфускации электронной почты, который затруднит захват ваших адресов электронной почты с помощью не-js клиента.

Добавьте его в качестве промежуточного программного обеспечения или, скорее, в качестве простого тега, который может воздействовать на объекты, содержащие текстильные данные.

0 голосов
/ 10 декабря 2015

Вы можете использовать django-email-obfuscator. Сначала установите его:

$ pip install django-email-obfuscator

Затем добавьте email_obfuscator к INSTALLED_APPS в settings.py:

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

В ваших шаблонах вы можете защитить адреса электронной почты с помощью фильтра obfuscate:

{% load email_obfuscator %}
{{ 'your@email.com'|obfuscate }}
...