Комментарий модерации Django, не публичный - PullRequest
1 голос
/ 22 сентября 2009

я пытаюсь модерировать комментарий из книги Джеймса Беннетта, я думаю, что все в порядке, но комментарий модерации только для СПАМА, и комментарии являются публичными ... так что, как плохо выкладывать комментарии, всегда не публично только администратор может делать публичные комментарии.

Спасибо

import datetime
from Paso_a_Paso.akismet import Akismet
from django.conf import settings
from django.contrib.comments.models import Comment
from django.contrib.comments.signals import comment_will_be_posted
from django.contrib.sites.models import Site
from django.utils.encoding import smart_str

from django.contrib.comments.moderation import CommentModerator, moderator

class NoticiaModerator(CommentModerator):
    auto_moderate_field= 'pub_date'
    moderate_after = 30
    email_notification = True


    def moderate(self, comment, content_object, request):
        already_moderated = super(NoticiaModerator,self).moderate(comment, content_object, request)
        if already_moderated:
            return True
        akismet_api = Akismet(key=settings.AKISMET_API_KEY,blog_url="http:/%s/" %Site.objects.get_current().domain)
        if akismet_api.verify_key():
            akismet_data = {'comment_type': 'comment',
                            'referrer': request.META['HTTP_USER_AGENT'],
                            'user_ip': comment.ip_address,
                            'user_agent': request.META['HTTP_USER_AGENT']}
            return akismet_api.comment_check(smart_str(comment.comment),
                                             akismet_data,
                                             build_data=True)
        return False


moderator.register(Noticia, NoticiaModerator)

Ответы [ 2 ]

1 голос
/ 22 сентября 2009

возможно, изменение поля is_public в функции модерации должно сработать

comment.is_public = False
0 голосов
/ 08 ноября 2012

Если вы хотите сделать все комментарии не общедоступными, кроме комментариев, отправленных администратором, то почему бы просто не сделать это просто в вашей функции moderate, e. г. что-то вроде:

def moderate(self, comment, content_object, request):
    if comment.user and comment.user.is_staff: #or maybe is_superuser
        return False
    return True

Если пользователь, отправивший комментарий, является сотрудником (или какими-либо другими требованиями), return False означает, что комментарий не будет модерироваться (например, is_public будет установлен на True), в противном случае return True означает он будет модерироваться (например, is_public установлен на False, пока кто-нибудь не установит его на True в интерфейсе администратора).

...