2010-05-19 3 views
5

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

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

Update:

На основании ответа 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][email protected][-.\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 [email protected]"|encode_mailto }} 

ответ

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][email protected][-.\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:[email protected]'>Send Mail</a>"|encode_mailto }} 
+0

Отлично, Благодарю. Я обновил свой вопрос с описанием того, как я получил этот подход, работающий в моем проекте. – bitbutter

2

Here «s то, что может быть использовано.

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

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

0

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

$ pip install django-email-obfuscator 

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

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

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

{% load email_obfuscator %} 
{{ '[email protected]'|obfuscate }} 
+0

Насколько я вижу, django-email-obfuscator может только обфускать простые адреса электронной почты, без блока (html) текста ...?! – benzkji

 Смежные вопросы

  • Нет связанных вопросов^_^