from django.contrib.comments.moderation import CommentModerator, moderator
from django.contrib.sites.models import Site
from django.conf import settings
class EntryModerator(CommentModerator):
def check_spam(self, request, comment, key, blog_url=None, base_url=None):
try:
from akismet import Akismet
except:
return False
if blog_url is None:
blog_url = 'http://%s/' % Site.objects.get_current().domain
ak = Akismet(
key=settings.AKISMET_API_KEY,
blog_url=blog_url
)
if base_url is not None:
ak.baseurl = base_url
if ak.verify_key():
data = {
'user_ip': request.META.get('REMOTE_ADDR', '127.0.0.1'),
'user_agent': request.META.get('HTTP_USER_AGENT', ''),
'referrer': request.META.get('HTTP_REFERER', ''),
'comment_type': 'comment',
'comment_author': comment.user_name.encode('utf-8'),
}
if ak.comment_check(comment.comment.encode('utf-8'), data=data, build_data=True):
return True
return False
def allow(self, comment, content_object, request):
allow = super(EntryModerator, self).allow(comment, content_object, request)
# change this depending on which spam provider you want to use
spam = self.check_spam(request, comment,
key=settings.AKISMET_API_KEY,
) or self.check_spam(request, comment,
key=settings.TYPEPAD_ANTISPAM_API_KEY,
base_url='api.antispam.typepad.com/1.1/'
)
return not spam and allow
moderator.register(Entry, EntryModerator)
Comments