This site uses the comments module provided by the Django web framework, in particular, is uses the FreeComment model to allow you to leave comments. One field I had not used so far was the "approved" field, I had simply put all the comments up on the web straight away, and just deleted the occasional spam that managed to beat the system.
Now however, I have decided to use the approved field. I will still put comments up straight away, but now I will set ones I have read to approved. Allowing me to view new comments behind the scenes.
One flaw in this plan is that I needed to set the existing comments to approved.
I could have just gone:
# Set all comments to approved
comments = FreeComment.objects.filter(approved=0)
for comment in comments:
comment.approved = 1
comment.save()
But I was not 100% sure that the odd spam was not caught, so while eating my morning porridge, I turned it into a really simple command line adventure game.
Just in case it is useful to anyone, here is it below. I actually typed the whole thing into the shell, but ipython has a lovely history command that allows you output everything you wrote.
Obviously, the LOCATION_OF_DJANGO_PROJECT needs to be set to the directory that your Django project is in, not the project directory itself.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Simple and ugly script to sort out FreeComments."""
######################
# Configure the following three variables:
URL = "http://commandline.org.uk"
LOCATION_OF_DJANGO_PROJECT = "/home/django/sites/"
CLEAR_COMMAND = "clear" # For Windows use CLS
#
#######################
import os
import sys
# Add Django project to Path
sys.path.append(LOCATION_OF_DJANGO_PROJECT)
# The following magic spell sets up the Django Environment
from django.core.management import setup_environ
from basic import settings
setup_environ(settings)
# Get the FreeComment model
from django.contrib.comments.models import FreeComment
def main():
"""Cycle through the comments, offer a simple choice."""
# Get all the unapproved comments
comments = FreeComment.objects.filter(approved=0)
os.system(CLEAR_COMMAND)
print "There are", len(comments), "comments to judge.\n"
# Go through the comments
for comment in comments:
# Show the hyperlink to the comment,
# In case you want to check it in the browser
print URL + comment.get_absolute_url()
# Comment name
print comment.person_name, "said:"
try:
# Comment text
print comment.comment
except UnicodeEncodeError:
# The world is a big place.
print "[something in unicode]"
print "\n\n"
# Now offer choice at the command line
print "Do you approve this comment?"
print "Press y for yes, d for delete, " + \
"nothing for skip, anything else to exit."
answer = raw_input()
if answer == "y":
comment.approved = 1
comment.save()
elif answer == "d":
comment.delete()
elif answer == "":
pass
else:
sys.exit()
os.system(CLEAR_COMMAND)
# Start the ball rolling.
if __name__ == '__main__':
main()
print "All done."
So pretty dumb, but publishing it here might save someone five minutes.