2010-05-19 5 views
5

में 'मुक्त इनपुट' टेक्स्ट फ़ील्ड्स में निहित ईमेल पतों को कैसे रोक सकता हूं, मेरे मॉडल में मैं अक्सर टेक्स्ट फ़ील्ड का उपयोग करता हूं जिसका उद्देश्य कपड़ा-स्वरूपित इनपुट के बड़े टुकड़े शामिल करना है। मैं स्वचालित रूप से इन टेक्स्ट फ़ील्ड में दर्ज किए गए किसी भी ईमेल पते को खराब करना चाहता हूं, ताकि जब वे टेम्पलेट में मुद्रित हों, वे मकड़ियों के लिए दृश्यमान नहीं हैं।मैं Django

क्या ऐसा करने का कोई शानदार तरीका है?

अद्यतन:

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 के कुछ है कि इस्तेमाल किया जा सकता।

ट्रिक एक ईमेल obfuscation कोड जोड़ने के लिए है जो आपके ईमेल पते को गैर-जेएस क्लाइंट का उपयोग करके कैद करने के लिए कठिन बना देगा।

इसे मिडलवेयर के रूप में जोड़ें, या एक सरलता के रूप में जो कपड़ा डेटा युक्त वस्तुओं पर कार्य कर सकता है।

0

आप django-email-obfuscator उपयोग कर सकते हैं। ,

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

अपने टेम्पलेट में आप obfuscate फिल्टर के साथ ईमेल पतों की सुरक्षा कर सकते हैं:: सबसे पहले, इसे स्थापित:

$ pip install django-email-obfuscator 

फिर, email_obfuscatorINSTALLED_APPS करने के लिए settings.py में जोड़ने

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

जहां तक ​​मैं देखता हूं, django-email-obfuscator केवल सादे ईमेल पते को रोक सकता है, कोई HTML (HTML) टेक्स्ट नहीं ...? – benzkji