5

私のモデルでは、テキスタイル形式の入力を大量に格納するためのテキスト フィールドをよく使用します。これらのテキスト フィールドに入力された電子メール アドレスを自動的に難読化して、テンプレートに印刷されたときにスパイダーに見えないようにしたいと考えています。

これを行うスマートな方法はありますか?

アップデート:

以下のlazerscienceの回答に基づいて、これは私が最終的に使用したコードです。ファイルに encode_mailto.py という名前を付けて、ほとんどの django プロジェクトにインストールする「ユーティリティ」タイプのアプリ内の templatetags ディレクトリに配置しました。

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

次に、 inに追加email_obfuscatorします。INSTALLED_APPSsettings.py

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

obfuscateテンプレートでは、フィルターを使用して電子メール アドレスを保護できます。

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